怎样退出死循环中的线程

zlxme 2002-12-17 05:27:23
我在程序中这样创建了线程
while(true)
{
Sleep(1000);
honkHandle=CreateThread(0, 0, (LPTHREAD_START_ROUTINE) TransImg, 0, 0, &threadID);
}
调用之后,总是无法退出程序,应该怎么做呢?
...全文
271 18 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
危险的程序

15,471

社区成员

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

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