线程入口函数如下,多个线徎 共用这一个入口函数
unsigned __stdcall CMsgThread::RunThread(void* pThis)
{
CMsgThread* pMsgThread = (CMsgThread*)this;
while(true)
{
data = CMsgQueuePrio::Instance()->getq();//没数据这里会一直等待
pMsgThread->deal(data);
}
return 0;
}线程入口函数会不断调到 getq取数据,取到数据后就调用 deal函数来处理。。如果 getq没有数据, 就会一直等待。。
我的疑问是,程序退出时如果才能安全退出线程呢。
unsigned __stdcall CMsgThread::RunThread(void* pThis)
{
CMsgThread* pMsgThread = (CMsgThread*)this;
while(true)
{
data = CMsgQueuePrio::Instance()->getq();//没数据这里会一直等待
pMsgThread->deal(data);
}
return 0;
}线程入口函数会不断调到 getq取数据,取到数据后就调用 deal函数来处理。。如果 getq没有数据, 就会一直等待。。
我的疑问是,程序退出时如果才能安全退出线程呢。
解决方案 »
- 如何在C++控制台下获取当前所有进程的路径和内存占用情况
- 求教:如何在显示扑克牌的时候,将扑克牌图片中四个角的白点显示为背景色?
- 通过注册表修改环境变量,并且查看我的电脑->属性->环境变量显示正确,但是注销之后重新登录修改无效的问题
- 求CPropertyPage Class E 文翻译(2)
- [求助]请问如何带参数的启动一个程序呢?
- ######请教通过socks5代理发送udp消息的问题#####
- 急,制作一个安装程序!
- 不提问题,来的都给分!
- 大家帮我看看数据源无效的问题!
- help: GetPixel and SelectClipRgn
- openCV 在MFC下如何关闭摄像头
- windows XP 自带远程桌面连接 被控制端异常
如果没数据,则wait一个退出的信号
没数据也不退出。这个入口函数是不断处理数据的。 只要来数据,就处理,没数据就等待。现在没有。 没准 一会就有了。这个线程在程序执行期间是永远不需要退出的。只是在 关闭程序时才退出线程。
我现在用的是 TerminateThread(m_hThread,1),我认为是没有问题的。 因为只有在程序关闭时才调用 。
我这样处理你看行不, 在程序退出时 队列里传入一个 退出标志 ,比如"EXIT", 然后 在 while里这么写
while(true)
{
data = CMsgQueuePrio::Instance()->getq();//没数据这里会一直等待
if(strcmp(const char*)data,"EXIT")==0)
break;
pMsgThread->deal(data);
}这样写,线徎入口函数是退出了。 可是问题来了。因为是多线程
我在 waitForSingleObject(m_hThread,INFINITE); 没信号 。如果是一个线程。这样写是没有问题的。
TerminateThread只是结束线程,当线程里有资源操作,如文件、事件、socket等操作时,TerminateThread并不会释放这些资源
那么,你有什么更好的办法么? 你的假设 “当线程里有资源操作,如文件、事件、socket等操作时”,在我的这个线程里都不存在。 我的线程就 处理数据而已。 内存也不需要在线程里释放。。我只是在程序退出时才调用 TerminateThread
你可以建立一个线程句柄队列,线程中定义一个BOOL m_bruning;变量,
while(m_bruning)
{
}如果需要退出线程,直接使用 pthreadX->m_bruning = FALSE 就OK了啊每个线程的 pthreadX地址不一样的
WM_QUIT是什么?你说的是mfc程序吗?
不是用MFC也可以类似处理
只要在取消息时,判断收到消息需要结束线程就可以了