读书人

关于线程传递参数的有关问题

发布时间: 2013-04-09 16:45:09 作者: rapoo

关于线程传递参数的问题


我想实现的效果如下图:
关于线程传递参数的有关问题


先谢谢了浏览该帖的人。
顶起都有分。
多线程 C++/C
[解决办法]
你传的是地址,线程入口函数调用的时候那个地址可能已经销毁了。如果只是一个int的话直接(LPVOID)i。
[解决办法]
在创建线程后,CloseHandle之前加上WaitForSingleObject(handle[i] ,INFINITE);
ps:最后应该delete []handle; // 释放空间
[解决办法]
自测不懂,请大神了,嘿
[解决办法]
Sleep(5000);放到Function2最后面
[解决办法]


#include <iostream>
#include <process.h>
#include <Windows.h>

using namespace std;

unsigned int _stdcall Thread_3(LPVOID pm);
void Function2();
CRITICAL_SECTION a;
HANDLE g_Event;

int main()
{
InitializeCriticalSection(&a);
g_Event=CreateEvent(NULL,FALSE,FALSE,NULL);
Function2();
Sleep(5000);
return 0;
}

void Function2()
{
int channelNumber;
cout<<"请输入要创建的线程的个数:"<<endl;
cin>>channelNumber;
HANDLE *handle=new HANDLE[channelNumber];
long i=0;
while(i<channelNumber)
{
handle[i]=(HANDLE)_beginthreadex(NULL,0,Thread_3,&i,0,NULL);
WaitForSingleObject(g_Event,INFINITE);
InterlockedIncrement((LPLONG)&i);
}

WaitForMultipleObjects(channelNumber,handle,TRUE,INFINITE);
for (int k=0;k<channelNumber;k++)
{
CloseHandle(handle[k]);
}
delete [] handle;
CloseHandle(g_Event);
DeleteCriticalSection(&a);
}


unsigned int _stdcall Thread_3(PVOID pm)
{
int i=*(int *)pm;
SetEvent(g_Event);
EnterCriticalSection(&a);
Sleep(10);
printf("线程%4d触发了\n",i);
LeaveCriticalSection(&a);
return 0;


}

读书人网 >C++

热点推荐