[英]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.