void main()
{
HANDLE hThread1;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
CloseHandle(hThread1);
Sleep(10);//
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{ cout<<"thread1 is running"<<endl;
return 0;
}
不加Sleep(10). 運行結(jié)果:空.
加上Sleep(10)后 運行結(jié)果:thread1 is running
書中說:
Sleep(10)讓主線程暫停運行10秒,使其放棄執(zhí)行的權(quán)利,操作系統(tǒng)就選擇線程1執(zhí)行;
當該線程1運行完成后或者10ms間隔時間已經(jīng)過去, 主線程就恢復運行,main()函數(shù)退出.
問題:
當該線程1運行完成后,或者10ms間隔時間已經(jīng)過去, 主線程就恢復運行,main()函數(shù)退出.
//我覺得這兩句有問題?
單單線程1運行完成后,主線程并不是立即就恢復運行,得等10ms后主線程恢復運行,main()函數(shù)退出
應(yīng)該為:
1:線程1在主線程的等待的10ms時間內(nèi)已經(jīng)結(jié)束. 則:得等10ms后恢復運行,main()函數(shù)退出.
2:線程1在主線程的等待的10ms時間內(nèi)沒結(jié)束,則:在主線程的10ms后,主線程最先被CPU執(zhí)行的時候,main()函數(shù)退出.
各位我理解的對嗎?
問題2:
我把Sleep(10),改為Sleep(0);按理說,不等待,等待時間為0,與不加Sleep(0)時一樣,可結(jié)果還是先執(zhí)行Thread 1.
----------------------------------------------------------------------
主線程退出的時候會強制結(jié)束子線程。但是實際上無法保證主線程在Sleep10秒之后立即就能運行。
Sleep(0)是有特殊意義的,雖然線程并不休眠,但是會交出時間片,由系統(tǒng)調(diào)配下一個等待線程運行。
摟主可以參考下 Windows核心編程
--------------------------------------------------------
Sleep之后線程就已經(jīng)暫停了(就是交出時間片)
參數(shù)只是暫停多長時間
--------------------------------------------------------
每條sleep()語句最少會消耗時間大概(20~50ms),根據(jù)系統(tǒng)狀況不同可能有所不一樣
就向上面幾位說的,因為sleep引起的暫停使得其他事件得以執(zhí)行