大哥大姐们~~~
    你们好!
帮我看段代码.
我的问题在代码后面写出:
#include <windows.h>
#include <iostream.h>DWORD WINAPI Proc(LPVOID lpVoid);
HANDLE g_hEvent[2];
struct Box
{
int nIndex;
};
void main()
{
    for(int i= 0; i<2; i++)
    {
       g_hEvent[i] = CreateEvent(NULL, TRUE, FALSE, NULL);
    }    for(int j =0; j<2;j++)
    {
DWORD dwThreadID;
Box box;
box.nIndex = j;
CreateThread(NULL,0,Proc,(LPVOID)&box,0,&dwThreadID);
     }     WaitForMultipleObjects(2, g_hEvent,TRUE,INFINITE);
     cout<<"两个线程执行完毕"<<endl;
}DWORD WINAPI Proc(LPVOID lpVoid)
{
Box *pBox = (Box *)lpVoid;
int nIndex = pBox->nIndex;
cout<<nIndex<<endl;
SetEvent(g_hEvent[nIndex]); return 1;
}
问题1:我创建了两个线程,两个线程的工作函数是同一个函数Proc,在Proc中我都人为的调用SetEvent()把事件设置为有信号事件,但是就是不能输出上面的汉字:两个线程执行完毕.
问题2:我在Proc中调用了cout<<nIndex<<endl;但是结果都是1,正常的话应该是一个是1一个是0,希望大哥大姐们解惑.在线等..谢谢 有分分给

解决方案 »

  1.   

    Box box; 
    box.nIndex = j; 
    CreateThread(NULL,0,Proc,(LPVOID)&box,0,&dwThreadID); 你出了线程后,box释放了...
      

  2.   

     for(int j =0; j <2;j++) 
        { 
    DWORD dwThreadID; 
    Box box; 
    box.nIndex = j; 
    CreateThread(NULL,0,Proc,(LPVOID)&box,0,&dwThreadID); 
    Sleep(1); // 注意这里,加一个Sleep
        }