请问各位,下面的程序怎么执行有问题,线程函数有时被执行,有时不被执行,为什么呀?快崩溃了!急!#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);
}

解决方案 »

  1.   

    WaitForSingleObject(hEvent,INFINITE)的原因;INFINITE表示一直等待。如果hEvent被加锁了,程序就会在这一步等待,直到被解锁。
      

  2.   

    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);         Sleep(3000); // 等待一段时间,不要这么快就关闭句柄。
        
    printf("%d\n",i);
        
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    CloseHandle(hEvent);
    }
      

  3.   

    hEvent可能与别的程序相同,导致线程中waitforsingleobject后面的代码不被执行,而线成就被close了。可以给hevent给一个名称,并且在close之前,先sleep以下
      

  4.   

    我觉得你使用的event 是非手动reset模式的,当你的一个线程结束以后,会被系统自动reset
    那么另外的一个线程就会等待,永远的等待。
    把这个事件更改为 手动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);
    }
      

  5.   

    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);
             WaitForSingleObject( hThrds[slot] , INFINITE );
             //你可以在这里加上这句当然参数可能部队用WaitForSingleObject比较合适
    printf("%d\n",i);
        
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    CloseHandle(hEvent);
    }