我有一个工作线程如下:
UINT WorkerThread( LPVOID pParam )
{
CWnd *pstaTimer=(CWnd*)pParam;
for(int i=0;i<1000;i++)
{
//TRACE("thread %d\n",i);
char szT[100];
sprintf(szT,"worker thread : %d",i);
pstaTimer->SetWindowText(szT);
Sleep(5);
}
return 0;
}调用方式:
void CSam_sp_43Dlg::OnWorkT()
{
AfxBeginThread(WorkerThread,&m_staTimer);
}程序起来后,运行该线程,运行结束后关闭窗口,正常,但是我发现在线程运行中关闭窗口会有内存泄漏,请教各位如何正常地在线程运行中关闭程序?谢谢
UINT WorkerThread( LPVOID pParam )
{
CWnd *pstaTimer=(CWnd*)pParam;
for(int i=0;i<1000;i++)
{
//TRACE("thread %d\n",i);
char szT[100];
sprintf(szT,"worker thread : %d",i);
pstaTimer->SetWindowText(szT);
Sleep(5);
}
return 0;
}调用方式:
void CSam_sp_43Dlg::OnWorkT()
{
AfxBeginThread(WorkerThread,&m_staTimer);
}程序起来后,运行该线程,运行结束后关闭窗口,正常,但是我发现在线程运行中关闭窗口会有内存泄漏,请教各位如何正常地在线程运行中关闭程序?谢谢
解决方案 »
- 数据更新后 怎么通知其他正在使用它的。。。。
- windows 7中CreateDC问题
- 现在想在数据库表中寻找是否存在与已有的某一条记录完全相同的记录。
- 我想问一下酷狗的那个树形控件是哪里来的怎么实现
- DialogBar中的对话框怎么响应消息?
- 用WSAAsyncSelect实现多播,问题!!!!!
- 没有文档视图框架的程序,怎么使用切分窗口?
- 有关内存管理,操作的问题(多进程共享的内存,...)
- TerminateProcess终止其他进程
- 这种参数该如何传?
- direct 中为什么会报link错,难道少了什么文件
- 现在有没有人知道如何用vc操作大二进制字段(blob),针对db2和oracle.
HANDLE hExit;
程序启动的时候初始化它:
hExit = CreateEvent(NULL,FALSE,FALSE,NULL);
关闭窗口的时候触发事件:
SetEvent(hExit);
WaitForSingleObject(hThread,INFINITE); //等待工作线程退出,hThread是工作线程的句柄
CloseHandle(hExit);
CloseHandle(hThread);工作线程中判断事件是否发生:
UINT WorkerThread( LPVOID pParam )
{
CEvent event;
CWnd *pstaTimer=(CWnd*)pParam;
for(int i=0;WaitForSingleObject(hExit,0) == WAIT_TIMEOUT && i<1000;i++)
{
//TRACE("thread %d\n",i);
char szT[100];
sprintf(szT,"worker thread : %d",i);
pstaTimer->SetWindowText(szT);
Sleep(5);
}
return 0;
}
TerminateProcess(handle,0);试试