_beginthreadex創建線程,立即執行?
阿新 • • 發佈:2017-08-26
code gin tro tab dex lpad mil and vertical
一個線程創建後,並不是立馬就執行,而是等時間片到來後才執行...
C++ Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#include <iostream> #include <Windows.h> #include <process.h> using namespace std; unsigned int _stdcall ThreadFun( long g_nNum; const int THREAD_NUM = 10; CRITICAL_SECTION g_csThreadCore; HANDLE hSemaphore; int main(void) { g_nNum = 0; HANDLE handle[10]; int i = 0; //初始化臨界區 InitializeCriticalSection(&g_csThreadCore); //創建信號量 hSemaphore = CreateSemaphore(NULL, 0, 1, NULL); { handle[i] = (HANDLE)_beginthreadex( NULL, //第1個參數:安全屬性,NULL為默認安全屬性 0, //第2個參數:指定線程堆棧的大小。如果為0,則線程堆棧大小和創建它的線程的相同。一般用0 ThreadFun, //第3個參數:指定線程函數的地址,也就是線程調用執行的函數地址(用函數名稱即可,函數名稱就表示地址) &i, 0, //第5個參數:線程初始狀態,0:立即運行;CREATE_SUSPEND:suspended(懸掛) NULL //第6個參數:用於記錄線程ID的地址 ); //直到hSemaphore有信號時,才往下繼續執行,而只有當創建的線程執行時,Semaphore才有信號。 WaitForSingleObject(hSemaphore, INFINITE); i++; } WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE); DeleteCriticalSection(&g_csThreadCore); CloseHandle(hSemaphore); cin >> i; return 0; } unsigned int _stdcall ThreadFun(void *pPM) { int nThreadnum = *(int *)pPM; ReleaseSemaphore(hSemaphore, 1, NULL); EnterCriticalSection(&g_csThreadCore); g_nNum++; printf("線程編號為%d 全局資源值為%d\n", nThreadnum, g_nNum); LeaveCriticalSection(&g_csThreadCore); return 0; } |
參考:
http://blog.csdn.net/shuilan0066/article/details/7683382%20
error C2065: ‘_beginthreadex‘ : undeclared identifier 的解決辦法
CreateThread()與beginthread()的區別詳細解析
_beginthreadex創建線程,立即執行?