请问各位,下面的程序怎么执行有问题,线程函数有时被执行,有时不被执行,为什么呀?快崩溃了!急!#include<stdio.h>
#include<windows.h>HANDLE hEvent;
int i = 1;
char g_cArray[10];
DWORD threadProc2(LPVOID lparam)
{
WaitForSingleObject(hEvent,INFINITE);
printf("%d\n",i); SetEvent(hEvent);
return 0;
}
DWORD threadProc1(LPVOID lparam)
{
WaitForSingleObject(hEvent,INFINITE);
i++;
printf("e%d\n",i); SetEvent(hEvent);
return 0;
}void main(void)
{
hEvent = CreateEvent(NULL,false,false,NULL);
HANDLE hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&threadProc1,NULL,0,NULL);
HANDLE hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&threadProc2,NULL,0,NULL);
SetEvent(hEvent);
printf("%d\n",i);
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hEvent);
}
#include<windows.h>HANDLE hEvent;
int i = 1;
char g_cArray[10];
DWORD threadProc2(LPVOID lparam)
{
WaitForSingleObject(hEvent,INFINITE);
printf("%d\n",i); SetEvent(hEvent);
return 0;
}
DWORD threadProc1(LPVOID lparam)
{
WaitForSingleObject(hEvent,INFINITE);
i++;
printf("e%d\n",i); SetEvent(hEvent);
return 0;
}void main(void)
{
hEvent = CreateEvent(NULL,false,false,NULL);
HANDLE hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&threadProc1,NULL,0,NULL);
HANDLE hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&threadProc2,NULL,0,NULL);
SetEvent(hEvent);
printf("%d\n",i);
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hEvent);
}
{
hEvent = CreateEvent(NULL,false,false,NULL);
HANDLE hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&threadProc1,NULL,0,NULL);
HANDLE hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&threadProc2,NULL,0,NULL);
SetEvent(hEvent); Sleep(3000); // 等待一段时间,不要这么快就关闭句柄。
printf("%d\n",i);
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hEvent);
}
那么另外的一个线程就会等待,永远的等待。
把这个事件更改为 手动reset模式就可以了。hEvent = CreateEvent(NULL,true,false,NULL);
void main(void)
{
hEvent = CreateEvent(NULL,true,false,NULL);
HANDLE hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&threadProc1,NULL,0,NULL);
HANDLE hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&threadProc2,NULL,0,NULL);
SetEvent(hEvent);
printf("%d\n",i);
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hEvent);
}
{
hEvent = CreateEvent(NULL,false,false,NULL);
HANDLE hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&threadProc1,NULL,0,NULL);
HANDLE hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&threadProc2,NULL,0,NULL);
SetEvent(hEvent);
WaitForSingleObject( hThrds[slot] , INFINITE );
//你可以在这里加上这句当然参数可能部队用WaitForSingleObject比较合适
printf("%d\n",i);
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hEvent);
}