社区
进程/线程/DLL
帖子详情
怎样退出死循环中的线程
zlxme
2002-12-17 05:27:23
我在程序中这样创建了线程
while(true)
{
Sleep(1000);
honkHandle=CreateThread(0, 0, (LPTHREAD_START_ROUTINE) TransImg, 0, 0, &threadID);
}
调用之后,总是无法退出程序,应该怎么做呢?
...全文
271
18
打赏
收藏
怎样退出死循环中的线程
我在程序中这样创建了线程 while(true) { Sleep(1000); honkHandle=CreateThread(0, 0, (LPTHREAD_START_ROUTINE) TransImg, 0, 0, &threadID); } 调用之后,总是无法退出程序,应该怎么做呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Free_Man
2003-01-21
打赏
举报
回复
原来这样!哈哈,那就不要退出了!
mzz_810
2003-01-21
打赏
举报
回复
没什么不好,不要过分使用就行。
HongHuer
2003-01-21
打赏
举报
回复
哈哈,谢谢你了。
我还有一些别的线程。
总之我使用了全局变量。
我想问的是,全局变量有什么不好的呢?
(类似的话我有听到一些次,但我没有遇到一次比较大的危害啊)
icelight
2003-01-21
打赏
举报
回复
在结构里包含"我的 pParam 要传递别的东西"就行了,传这个结构指针过去。
HongHuer
2003-01-21
打赏
举报
回复
我知道做个结构也是可以的。
HongHuer
2003-01-21
打赏
举报
回复
谢谢 icelight;
我的 pParam 要传递别的东西。
我上面写的是一个示例。
icelight
2003-01-21
打赏
举报
回复
最好别用全局变量。应该让主线程new一个变量传给线程。主线程可以通过这个new出来的变量控制线程的退出。
HongHuer
2003-01-21
打赏
举报
回复
//a.cpp
UINT MyThread(LPVOID pParam)
{
while(true)
{
if(::g_bOverThread == true)
{
return 1;
}
// handle
}
}
//b.cpp
//if i want to end the thread
::g_bOverThread = true;
请问:这样难道不行吗?
lizmei001
2003-01-21
打赏
举报
回复
可以考虑用SuspendThread
与ResumeThread来控制线程一时间运行一会儿:)
while(m_bLoop)
{
ResumeThread(m_hThread);
::Sleep(1000);
SuspendThread(m_hThread);
}
icelight
2003-01-21
打赏
举报
回复
用全局变量没什么不好,只是破坏了封装性。恰好我是疯狂的封装派。
HongHuer
2003-01-21
打赏
举报
回复
要做事了。
HongHuer
2003-01-21
打赏
举报
回复
谢谢楼上的回答。
可惜没有分给。
:)
season11
2002-12-18
打赏
举报
回复
同意beyound(我知道为什么总让我重新登陆)的设置变量!
但是不能设置局部变量,应该设制一个全局变量,在主线程中你可以修改随时修改全局变量,然后在辅助线程中判定去全局变量的值来决定是否退出!
beyound
2002-12-17
打赏
举报
回复
bool m_bFlag=0;
while(!m_bFlag)
{
......
}
然后对m_bFlag控制是否结束这可怕的死循环起线程
NowCan
2002-12-17
打赏
举报
回复
这当然无法退出了,while(一个条件变量)就可以了。
你想退出的时候改一下那个条件变量
aben456
2002-12-17
打赏
举报
回复
你现在是每隔一段时间就创建一个线程,
况且你的WHILE里面也没有BREAK哦
当然无法退出了
你可以设置一个变量或者事件
根据需要退出
zlxme
2002-12-17
打赏
举报
回复
那我要怎么写呢?我是想让线程每隔一定的时间执行
SinAngel
2002-12-17
打赏
举报
回复
危险的程序
C/C++
中
退出
线程
的四种解决方法
退出
线程
可以有四种方法: 1.
线程
函数的return返回(最好这样):其
中
用
线程
函数的return返回, 而终止
线程
是最安全的, 在
线程
函数return返回后, 会清理函数内申请的类对象, 即调用这些对象的析构函数. 然后会自动调用 _endthreadex()函数来清理 _beginthreadex(…)函数申请的资源(主要是创建的tiddata对象). 2.调用 _endthreadex()函数 或 ExitThread()函数(最好不要):如果使用这两种方法
退出
线程
, 则不会执行
线程
函数的return语句, 所以就不会调用
线程
函数作用域内申请的类对象的析构函数, 会造成内存泄露. 剩下两
内核
线程
中
获取接收到的信号
在测试开发的内核模块时,发现了一个BUG:在模块没有卸载时使用reboot命令重启系统的话,系统重启不了,查看日志发现在创建的内核
线程
中
陷入了
死循环
,导致系统无法重启。检查了代码,发现产生问题的原因是当系统调用返回-EINTR(也是被信号
中
断),内核
线程
中
的循环没有
退出
,而是继续循环操作,这个逻辑跟业务是相符合的并没有错误。问题在于没有检查接收到的是什么信号,如果是在系统重启时发送的信号或者执行关机时发送的信号,应该
退出
循环。剩下的是找到在内核
线程
中
获取接收的信号的方法。 在用户态获取阻塞的信号,调用的是sigpending(),因此首先尝试调用sys_sigpending()来获取。
C++11 14 17 20 多
线程
从原理到
线程
池实战
学习计划 每天学习一小时以上 跟着视频动手编写代码 调试代码并对比课程多提供的源码 课程目标 理解多
线程
原理并学会c++11 的多
线程
编程 理解
线程
池技术原理并能使用c++实现 理解c++11 14 17 20 多
线程
编程相关特性 常见问题 课程使用的开发工具? 课程使用的开发工具是vs2019 课程代码是否是跨平台? 课程代码都是基于c++自生特性,没有用到第三方库,都是跨平台 旧版本的开发工具是否可以? 课程
中
的大部分代码是c++11 ,绝大部分开发工具都支持,其
中
c++14 17要比较新的工具支持,c++20需要vs2019 课程是否提供源码? 课程提供源码,方便同学学习过程的出现问题,进行对照调试错误。
关闭窗体后,进程仍然在运行的问题示例代码
在开发
中
,遇到这样一个问题: 点击程序主窗体右上角的叉号关闭应用程序后,程序的进程却没有关闭。 通过查阅资料,了解到,产生此类问题的原因主要有以下两点: 1)程序
中
存在
死循环
。 2)程序为多
线程
程序,且在窗体关闭后,仍有
线程
在工作。 本例将针对此类问题,进行重现并提出解决方案。
Android 消息机制详解及实例代码
Android 消息机制 1.概述 Android应用启动时,会默认有一个主
线程
(UI
线程
),在这个
线程
中
会关联一个消息队列(MessageQueue),所有的操作都会被封装成消息队列然后交给主
线程
处理。为了保证主
线程
不会
退出
,会将消息队列的操作放在一个
死循环
中
,程序就相当于一直执行
死循环
,每循环一次,从其内部的消息队列
中
取出一个消息,然后回调相应的消息处理函数(handlerMessage),执行完成一个消息后则继续循环,若消息队列为空,
线程
则会阻塞等待。因此不会
退出
。如下图所示: Handler 、 Looper 、Message有啥关系? 在子
线程
中
完成耗时操作,很多情况下需要更
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章