如题,我的目的很简单,就是想测试一下这个函数是不是有问题;
创建多个线程,使用一个线程函数,对一个全局数据操作,打印后再加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
但是我还有找不到错误,有没有同志 遇到过这个问题呢?多谢赐教