struct PointInfo
{
int x;
int y;
HANDLE hEvent;
};
//第一种方法
void XXXFunction()
{
PointInfo pinfo; //栈变量
pinfo.x = 100;
pinfo.y = 200;
pinfo.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
CreateThread(NULL,0,tWorker,&pinfo,0,NULL);
WaitforSingleObject(pinfo.hEvent,0xffffffff);
}
DWORD WINAPI tWorker(LPVOID p)
{
PointInfo pinfo = *(PointInfo*)p;
SetEvent(pinfo.hEvent);
CloseHandle(pinfo.hEvent);
do something....
return 0;
}
//第二种方法
void XXXFunction()
{
PointInfo* pinfo = new PointInfo; //堆变量
pinfo->x = 100;
pinfo->y = 200;
CreateThread(NULL,0,tWorker,pinfo,0,NULL);
}
DWORD WINAPI tWorker(LPVOID p)
{
PointInfo* pinfo = (PointInfo*)p;
do something....
delete pinfo; return 0;
}问题:
哪种方法好,或者有更好的方法请指教?
如果需要不停的产生短寿命的线程
第一种方法需要经常CreateEvent和CloseHandle,第二种需要经常new和delete,不知道哪种对系统的冲击更大?
{
int x;
int y;
HANDLE hEvent;
};
//第一种方法
void XXXFunction()
{
PointInfo pinfo; //栈变量
pinfo.x = 100;
pinfo.y = 200;
pinfo.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
CreateThread(NULL,0,tWorker,&pinfo,0,NULL);
WaitforSingleObject(pinfo.hEvent,0xffffffff);
}
DWORD WINAPI tWorker(LPVOID p)
{
PointInfo pinfo = *(PointInfo*)p;
SetEvent(pinfo.hEvent);
CloseHandle(pinfo.hEvent);
do something....
return 0;
}
//第二种方法
void XXXFunction()
{
PointInfo* pinfo = new PointInfo; //堆变量
pinfo->x = 100;
pinfo->y = 200;
CreateThread(NULL,0,tWorker,pinfo,0,NULL);
}
DWORD WINAPI tWorker(LPVOID p)
{
PointInfo* pinfo = (PointInfo*)p;
do something....
delete pinfo; return 0;
}问题:
哪种方法好,或者有更好的方法请指教?
如果需要不停的产生短寿命的线程
第一种方法需要经常CreateEvent和CloseHandle,第二种需要经常new和delete,不知道哪种对系统的冲击更大?
{
PointInfo pinfo; //栈变量
pinfo.x = 100;
pinfo.y = 200;
pinfo.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
CreateThread(NULL,0,tWorker,&pinfo,0,NULL);
WaitforSingleObject(pinfo.hEvent,0xffffffff);
}
这个有问题吧
PointInfo pinfo 是局部变量,如果线程要运行很长时间,要出现线程还在运行,而pinfo 已经不再存在,内存会出现访问错误。
不过这种频繁的启动和关闭线程本身就是不好的设计,非常浪费系统的资源(主要是cpu资源),为什么不用线程池呢?或者固定数量的worker thread?