当启用多个线程时,如何知道它们当中谁先完成
typedef struct _THREAD_PARAM{
DWORD ProdID;
DWORD StockID;
int random;
}THREAD_PARAM,*LPTHREAD_PARAM;
DWORD WINAPI FunlProc(LPVOID lpParameter)
{
LPTHREAD_PARAM pData;;
pData=(LPTHREAD_PARAM)lpParameter;
//int random=rand()%1000;
for (int n = 0; n < pData->random; n++)
{
Sleep(100);
}
TRACE("TID =%u,\t ProdID=%u,\t StockID=%u,\t random=%d\n",GetCurrentThreadId(),pData->ProdID,pData->StockID,pData->random);
HeapFree(GetProcessHeap(),0,pData);
return 0;
}
void CThreadDemoDlg::OnButtonTest()
{
// TODO: Add your control notification handler code here
MessageBox("测试开启");
int ThreadNumber;
int i;
LPTHREAD_PARAM pData;
HANDLE hThread[3];
DWORD dw;
int iUseThread;
for(i=0;i<3;i++)
{
hThread[i]=NULL;
}
for(ThreadNumber=1;ThreadNumber<=12;ThreadNumber++)
{
if (ThreadNumber<=3)
{
pData=(LPTHREAD_PARAM)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(THREAD_PARAM));
if(pData==NULL)
{
MessageBox("内存分配错误");
return;
}
pData->ProdID=ThreadNumber ;//(ThreadNumber*10)+i;
pData->StockID=(ThreadNumber*100)+i;
pData->random=rand()%100;
hThread[ThreadNumber-1]=CreateThread(NULL,0,FunlProc,pData,0,NULL);
if(hThread[ThreadNumber-1]==NULL)
{
ExitProcess(ThreadNumber-1);
}
}
else
{
iUseThread=-1;
while(iUseThread==-1)
{
for(i=0;i<3;i++)
{
dw=WaitForSingleObject(hThread[i],INFINITE);
if(dw==WAIT_OBJECT_0)
{
TRACE("ThreadNumber=%d\t iUseThread=%d\n",ThreadNumber,i);
iUseThread=i;
CloseHandle(hThread[i]);
break;
}
}
}
pData=(LPTHREAD_PARAM)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(THREAD_PARAM));
if(pData==NULL)
{
MessageBox("内存分配错误");
return;
}
pData->ProdID=ThreadNumber;//(ThreadNumber*10)+i;
pData->StockID=(ThreadNumber*100)+i;
pData->random=rand()%100;
hThread[iUseThread]=CreateThread(NULL,0,FunlProc,pData,0,NULL);
if(hThread[iUseThread]==NULL)
{
ExitProcess(iUseThread);
}
}
}
dw=WaitForSingleObject(hThread[i],INFINITE);
if(dw==WAIT_OBJECT_0)
{
TRACE("ThreadNumber=%d\t iUseThread=%d\n",ThreadNumber,i);
iUseThread=i;
CloseHandle(hThread[i]);
break;
}
我的本意是想判断3个线程中 谁先完成 就用谁又在开启一个线程
但总的线程数量 只有3个
但是使用WaitForSingleObject 变成了始终去等第一个线程完成去了
这个地方 我向请问下各位大侠 该怎么写
或者说 当我要开启N个任务要做时 但一次只允许有3个线程去处理,谁先做完后,就立即释放一个线程,同时又在开启一个线程时 这种情况该怎么处理比较好 谢谢各位了!
...全文
相关推荐
windows多线程编程指南
多线程编程指南,写的还算具体。大家不妨看看。:)
多线程编程技术《Programming Multithreaded applications
线程是比进程更小的单位,可以认为进程是由一个或多个线程组成的。据说以前的400 版本并不支持真正的多线程技术,在4.2 版后才从内核上提供了对多线程的支持。总之写这 份文档的时候,绝大部分版本应该可以支持。
C#判断线程池中所有的线程是否已经完成
C#判断线程池中所有的线程是否已经完成.doc
java使用CountDownLatch等待多线程全部执行完成
主要为大家详细介绍了使用CountDownLatch等待多线程全部执行完成,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java多线程读取多个文件的方法
主要为大家详细介绍了java多线程读取多个文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


进程/线程/DLL
