读书人

WaitForMultipleObjects函数有点不听话

发布时间: 2013-01-25 15:55:29 作者: rapoo

WaitForMultipleObjects函数有点不听话了,谁遇到过没有?
如题,我的目的很简单,就是想测试一下这个函数是不是有问题;
创建多个线程,使用一个线程函数,对一个全局数据操作,打印后再加1,源代码如下:

/*得到一个文件目录下的所有目录并打印出来*/
#include "windows.h"
#include "iostream.h"
#include "stdio.h"
DWORD dwThreadid[32];//线程ID
HANDLE hThread[32];//线程句柄
HANDLE hDirEvent=NULL;//事件句柄
int count=0;//记录个数,打印的就是这个数据

DWORD WINAPI ThreadFun(LPVOID lpParameter);//线程函数

void main()
{
hDirEvent=CreateEvent(NULL,FALSE,TRUE,NULL);
for(int i=0;i<32;i++)
CreateThread(NULL,0,ThreadFun,NULL,0,&dwThreadid[i]);
WaitForMultipleObjects(32,hThread,TRUE,INFINITE);
//getchar();
cout<<"主线程要退出!"<<endl;
CloseHandle(hDirEvent);
for(int j=0;j<32;++j)
CloseHandle(hThread[j]);

}

DWORD WINAPI ThreadFun(LPVOID lpParameter)
{
WaitForSingleObject(hDirEvent,INFINITE);
printf("线程:%d\n",count);
count++;
SetEvent(hDirEvent);
return 0;
}

正常情况下应该是打印出0~31这些数字,然后显示“主线程要退出!”,
但是结果就出乎意料了,下面我写一个结果:
线程ID:0
线程ID:1
线程ID:2
线程ID:3
线程ID:4
线程ID:5
线程ID:6
线程ID:7
线程ID:8
线程ID:9
线程ID:10
线程ID:11
线程ID:12
线程ID:13
线程ID:14
线程ID:15
线程ID:16
线程ID:17
线程ID:18
线程ID:19
线程ID:20
线程ID:21
线程ID:22
主线程要退出!
线程ID:23
线程ID:23
线程ID:24
但是我还有找不到错误,有没有同志 遇到过这个问题呢?多谢赐教。。。
[解决办法]
for(int i=0;i<32;i++)
hThread[i] = CreateThread(NULL,0,ThreadFun,NULL,0,&dwThreadid[i]);
[解决办法]
没给hThread赋值
[解决办法]
http://msdn.microsoft.com/en-us/library/ms687055(v=vs.85).aspx
楼主的代码有问题 看看msdn的例子吧
[解决办法]
hThread的值是什么

读书人网 >VC/MFC

热点推荐