[英]WaitForSingleObject Crash
我试图通过使用互斥来保护一段代码。 由于代码崩溃,我在下面创建了一个简单的测试代码,其作用相同。 崩溃不一定每次都在同一行代码上,而是总是在“ WaitForSingleObject”或“ Sleep”调用周围。
任何援助将不胜感激。
#include <thread>
#include <windows.h>
#include <process.h>
static HANDLE myMutex;
//The function we want to make the thread run.
void task1()
{
WaitForSingleObject(myMutex, INFINITE);
for (int i = 0; i < 20; i++)
{
Sleep(500);
}
ReleaseMutex(myMutex);
}
void task2()
{
Sleep(10);
WaitForSingleObject(myMutex, INFINITE);
for (int i = 0; i < 20; i++)
{
Sleep(10);
}
ReleaseMutex(myMutex);
}
int main(int argc, char **argv)
{
myMutex = CreateMutex(0, FALSE, 0);
std::thread t1(task1);
std::thread t2(task2);
}
问题是您没有在main
方法退出之前等待线程退出。 thread
对象上的析构函数在不退出线程的情况下被调用。 您需要调用join
来等待主方法。 尝试:
int main(int argc, char **argv)
{
myMutex = CreateMutex(0, FALSE, 0);
std::thread t1(task1);
std::thread t2(task2);
if(t1.joinable())
t1.join();
if(t2.joinable())
t2.join();
}
根据std :: thread析构函数文档:
销毁线程对象。 如果*这仍然具有关联的运行线程(即joinable()== true),则调用std :: terminate()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.