关于线程的启动和停止 不要用TerminateThread,你发一个WM_QUIT消息给那个线程让他自己停止。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 TerminateThread使线程非正常终止,所占用的资源没有释放。应该想方法通知线程让它自己终止。 to: rovoboy(雪花满天) 能说说具体怎么做吗? SendMessage不行,我使用CWinThread的PostThreadMessage方法,不过似乎没有办法停下来啊…… 1、CwinThread * pThread = AfxBeginThread(RUNTIME_CLASS(YourClass)); //启动CwindThread派生类一般如此。2、在线程类中定义消息 #define WM_STOPTHREAD USER+100; BEGIN_MESSAGE_MAP() // // ON_THREAD_MESSAGE(WM_STOPTHREAD,OnStopThread) END_MESSAGE_MAP()3、编写函数: ....::OnStopThread() { ::PostQuitMessage(); return 0; }4、最后,终止线程只需如下: pThread->PostThreadMessage(WM_STOPTHREAD,0,0); 1、CwinThread * pThread = AfxBeginThread(RUNTIME_CLASS(YourClass)); //启动CwindThread派生类一般如此。2、在线程类中定义消息 #define WM_STOPTHREAD USER+100; BEGIN_MESSAGE_MAP() // // ON_THREAD_MESSAGE(WM_STOPTHREAD,OnStopThread) END_MESSAGE_MAP()3、编写函数: ....::OnStopThread() { ::PostQuitMessage(); return 0; }4、最后,终止线程只需如下: pThread->PostThreadMessage(WM_STOPTHREAD,0,0); 如果你的线程不是MFC的CWinThread类,你就用消息循环或WaitforSingleObject监视消息队列中是否有WM_QUIT消息,有则正常退出。在控制线程或主线程中用PostThreadMessage(ThreadID,WM_QUIT,0,0);就行。 to larger(滥炸) 我应该在什么地方循环这个消息呢? 你的监听过程应该是个循环,用WaitforSingleObject在循环开始时测试一下就行。 这是一个比较麻烦的问题,你的线程里面是不能用阻塞方式进行诊听的。应该循环Listen()一小段时间,然后判断是否有其他消息用PeekMessage或GetMessage,然后进行下一次诊听或退出。 我的监听线程不坑用peekmessage我要用他来监听网络的…… 同意 larger:如果监听过程是循环,开头WaitforSingleObject(hEvent, 0);几乎不耗时循环侦测对象有无信号.要终止时SetEvent(hEvent) 是一个while(true)的循环,用来监听网络的。还有能不能说说看用WaitforSingleObject具体怎么实现,我试试看…… 是一个while(true)的循环,用来监听网络的。还有能不能说说看用WaitforSingleObject具体怎么实现,我试试看…… MFC从sqlite的*.DB文件里面读取数据,生成线形图。哪个大虾给个例子呗 清缓存区 Windows进程区通信,内存映射文件方式问题. 能否通过获取句柄控制其他程序 有没有遇到过这种奇怪的事情? 高分跪求:VC下画图-在线等 请教:怎样用WebBrowser保存一个完整的页面?(急!!!) 什么网站的代码最好 请教,急得吐血!!!!!!!! 如何在对话框出来后,触发按钮事件 如何动态实现CFramwWnd与文档视图的绑定? 等待事件对象的问题,困惑....
应该想方法通知线程让它自己终止。
能说说具体怎么做吗?
//启动CwindThread派生类一般如此。
2、在线程类中定义消息
#define WM_STOPTHREAD USER+100;
BEGIN_MESSAGE_MAP()
//
//
ON_THREAD_MESSAGE(WM_STOPTHREAD,OnStopThread)
END_MESSAGE_MAP()
3、编写函数:
....::OnStopThread()
{ ::PostQuitMessage();
return 0;
}
4、最后,终止线程只需如下:
pThread->PostThreadMessage(WM_STOPTHREAD,0,0);
//启动CwindThread派生类一般如此。
2、在线程类中定义消息
#define WM_STOPTHREAD USER+100;
BEGIN_MESSAGE_MAP()
//
//
ON_THREAD_MESSAGE(WM_STOPTHREAD,OnStopThread)
END_MESSAGE_MAP()
3、编写函数:
....::OnStopThread()
{ ::PostQuitMessage();
return 0;
}
4、最后,终止线程只需如下:
pThread->PostThreadMessage(WM_STOPTHREAD,0,0);
在控制线程或主线程中用PostThreadMessage(ThreadID,WM_QUIT,0,0);就行。
如果监听过程是循环,开头WaitforSingleObject(hEvent, 0);
几乎不耗时循环侦测对象有无信号.要终止时SetEvent(hEvent)