没有搞懂老帖子,关于WaitforsingleObject
老帖子没有搞懂,关于WaitforSingleObjectwaitforsingleObject(句柄,-1); 表示 当 句柄所指的东东有信号的时候,才会返回。。。。。这句话是来自windows核心编程上的。 这里的句柄是表示线程内核。不是Event.fun1Proc的代码可以看出,首先进入临界区,然后开始执行。。。。fun2Proc同理。但是事实上,线程根本没有运行!! 没有打印任何结果。 不少网友认为之所以没有执行线程,是因为CloseHandle和WaitforSingleObject顺序反了,颠倒过来,就可以了。。。别忘了,CreateThread 后,线程的内核对象是2,不是1,所以可以创建后,就CloseHandle.所以 颠倒顺序,没有说到点上。int tickets = 100;CRITICAL_SECTION criSection;int main(){ HANDLE hThread2; HANDLE hThread1; InitializeCriticalSection(&criSection); hThread1 = CreateThread(NULL,0,Fun1Proc1,NULL,0,NULL); hThread2 = CreateThread(NULL,0,Fun1Proc2,NULL,0,NULL); CloseHandle(hThread1); CloseHandle(hThread2); WaitForSingleObject(hThread1,-1); WaitForSingleObject(hThread2,-1); DeleteCriticalSection(&criSection); return 0 ;}DWORD WINAPI Fun1Proc1( LPVOID lpParameter // thread data ){ while(TRUE) { EnterCriticalSection(&criSection); if(tickets>0) { Sleep(1); cout<<"thread1 sell ticket : "<<tickets--<<endl; } else{ LeaveCriticalSection(&criSection); break; } LeaveCriticalSection(&criSection); } return 0;}DWORD WINAPI Fun1Proc2( LPVOID lpParameter // thread data ){ while(TRUE) { EnterCriticalSection(&criSection); if(tickets>0) { Sleep(1); cout<<"thread2 sell ticket : "<<tickets--<<endl; } else { LeaveCriticalSection(&criSection); break; } LeaveCriticalSection(&criSection); } return 0;}