这样结束线程可以吗?

JeffHe 2000-03-30 06:12:00
((CCORBAConsoleApp*)AfxGetApp())->m_pThread =
AfxBeginThread(RunMyThread,&p);
CProgressDlg m_Dlg;
if(IDCANCEL==m_Dlg.DoModal ())
{
if(((CCORBAConsoleApp*)AfxGetApp())->m_pThread!=NULL)
((CCORBAConsoleApp*)AfxGetApp())->m_pThread
->ExitInstance ();
}
...全文
203 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
9Thoughts 2000-04-10
  • 打赏
  • 举报
回复
zzh的意见比较全面
zzh 2000-04-08
  • 打赏
  • 举报
回复
在两个线程中间传递消息有好几种方法,全局变量,消息,事件等,你可以看《VisualC++6.0技术内幕》第五版,里面有详细的介绍,或者《Visual C++5.0实用编程技术》,这本书里面也有对线程使用的详细说明。
我一般是用WaitForSingleObject(hEvent,INFINITE)==WAIT_OBJECT_0来结束线程,这样不会导至内存泄露或资源丢失的现象。用你的哪种方法,很有可能会出现内存泄露。因为你线程句柄没有关掉。线程没有收到PostThreadMessage发送的消息,可能是在收到消息之前,线程就已经退出了。
zzh 2000-04-08
  • 打赏
  • 举报
回复
在两个线程中间传递消息有好几种方法,全局变量,消息,事件等,你可以看《VisualC++6.0技术内幕》第五版,里面有详细的介绍,或者《Visual C++5.0实用编程技术》,这本书里面也有对线程使用的详细说明。
我一般是用WaitForSingleObject(hEvent,INFINITE)==WAIT_OBJECT_0来结束线程,这样不会导至内存泄露或资源丢失的现象。用你的哪种方法,很有可能会出现内存泄露。因为你线程句柄没有关掉。
zheng_rui 2000-04-03
  • 打赏
  • 举报
回复
在线程中设置一个标记,比如bCancel,终止时,在主线程中设置bCancel的值,然后等待线程终止,比如用WaitForSingleObject,或者while(PeekMessage){TranslateMessage,DispatchMessaege}
whale 2000-04-03
  • 打赏
  • 举报
回复
可以使用Event,在主程序里创建三个Event:
HANDLE hEventStart; //启动子线程
HANDLE hEventStop; //结束子线程
HANDLE hEventStopped; //子线程已经结束

在子线程中使用如下程序结构:

{
while (TRUE)
{
if (WaitForSingleObject(hEvnetStart,INFINITE) != WAIT_OBJECT_0)
continue;
if (WaitForSingleObject(hEventStop,INFINITE) == WAIT_OBJECT_0)
break;

.......

}

SetEvent(hEventStopped);
}

在主线程中用SetEvent(hEventStart)就可以启动子线程。
用SetEvent(hEventStop)就可以停止子线程(必须先SetEvent(hEventStart))。
可以用WaitForSingleObject(hEventStopped,INFINITE)来等待子线程结束。
JeffHe 2000-04-03
  • 打赏
  • 举报
回复
我后来又试了PostThreadMessage(),我在CMyWinThread Class中定义了自己的Message,但无论如何我也收不到从另外一个线程中调用PostThreadMessage()所发送的Message.怎样在两个线程之间发送消息?
Sniper 2000-03-31
  • 打赏
  • 举报
回复
一般不这样作,因为这样强制线程退出,很可能造成在线程中分配的内存等对象无法释放。你可以用线程同步通知线程自己退出。
推荐《Windows高级编程指南》,清华大学出版社。
Sniper 2000-03-31
  • 打赏
  • 举报
回复
一般不这样作,因为这样强制线程退出,很可能造成在线程中分配的内存等对象无法释放。
powerstone 2000-03-30
  • 打赏
  • 举报
回复
这样也许可以,不过好象不太安全。
不知你的线程是做什么用,不过可以考虑用event通知thread,让thread用exitthread自己退出。

15,472

社区成员

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

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