《》《》《》《》 关于工作线程的异常关闭问题 《》《》《》《》

stevenying 2004-08-24 11:16:34
我有一个工作线程如下:
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);
}

程序起来后,运行该线程,运行结束后关闭窗口,正常,但是我发现在线程运行中关闭窗口会有内存泄漏,请教各位如何正常地在线程运行中关闭程序?

谢谢
...全文
76 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevenying 2004-08-25
  • 打赏
  • 举报
回复
up
popyyb 2004-08-25
  • 打赏
  • 举报
回复
HANDLE handle = GetCurrentProcess();
TerminateProcess(handle,0);

试试
yaozijian110 2004-08-24
  • 打赏
  • 举报
回复
声明一个全局变量
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;
}

stevenying 2004-08-24
  • 打赏
  • 举报
回复
up
stevenying 2004-08-24
  • 打赏
  • 举报
回复
如何设置,各位大侠能否具体点?谢谢
DentistryDoctor 2004-08-24
  • 打赏
  • 举报
回复
工作线程应该设置结束条件,这样,就可以在结束程序前安全的结束线程了。
flyelf 2004-08-24
  • 打赏
  • 举报
回复
截获退出事件,等待线程完全退出之后,结束对话框
holyeagle 2004-08-24
  • 打赏
  • 举报
回复
for循环的时候增加事件标识,在退出时候设置事件,先让线程退出,再退出主程序
mythay 2004-08-24
  • 打赏
  • 举报
回复
或者窗口关闭前TerminateThread。
oyljerry 2004-08-24
  • 打赏
  • 举报
回复
设定一个全局变量,当想退出的时候,标记该变量,在线程的循环中,判断这个变量,当发现变量被标记了时(也就是想退出时),退出循环,然后退出程序

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧