_beginthreadex创建线程,立即执行?
一个线程创建后,并不是立马就执行,而是等时间片到来后才执行...
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(void *pPM); 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); while(i < THREAD_NUM) { handle[i] = (HANDLE)_beginthreadex( NULL, //第1个参数:安全属性,NULL为默认安全属性 0, //第2个参数:指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程的相同。一般用0 ThreadFun, //第3个参数:指定线程函数的地址,也就是线程调用执行的函数地址(用函数名称即可,函数名称就表示地址) &i, //第4个参数:传递给线程的参数的指针,可以通过传入对象的指针,在线程函数中再转化为对应类的指针 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()的区别详细解析
希望大家能把自己的所学和他人一起分享,不要去鄙视别人索取时的贪婪,因为最应该被鄙视的是不肯分享时的吝啬。