我想让一个线程启动后就一直驻留在后台,怎么做?

yjgx007 2003-11-25 10:53:12
线程创建后,执行完线程函数就返回,
如果能在idle时间执行线程函数,又不占用cpu资源,维持这一个线程,怎么做?

注意:不要使用定时器,也不要在线程函数中使用无限循环方式,太耗cpu
...全文
211 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjgx007 2003-11-25
  • 打赏
  • 举报
回复
ZHENG017(努力赚钱,买房子车子)

采用消息循环方式是在线程函数中吗?
WaitForSingleObject(urHandle, -1);是线程互斥的一个函数跟这个有关系吗?
ExcuseMe 2003-11-25
  • 打赏
  • 举报
回复
你说的好象矛盾吧
"执行完线程函数就返回"都返回了。。线程就结束了
除非你在创建线程!
只有sleep符合你的要求!
或者CreateEvent和ResetEvent
Tine 2003-11-25
  • 打赏
  • 举报
回复
你可以在循环中sleep
ZHENG017 2003-11-25
  • 打赏
  • 举报
回复
MSG stMsg = {0};

while ( 1 )
{
//开始消息循环
::GetMessage (&stMsg,(HWND)NULL,0,0);
::TranslateMessage (&stMsg);
::DispatchMessage (&stMsg);
}

OR
WaitForSingleObject(urHandle,-1);
or
select....
yjgx007 2003-11-25
  • 打赏
  • 举报
回复
georgehoul(啊哈)

可以考虑用1和4的办法,试一下,一定给分
采用WaitForSingleObject(urHandle,-1)函数无限期的等待一个互斥对象不是太好的办法,我的意思是当主程序空闲的时候,就启动线程函数(或者可以不是线程函数,也许跟本不用创建线程)开始处理
flinming 2003-11-25
  • 打赏
  • 举报
回复
CreateThread
georgehoul 2003-11-25
  • 打赏
  • 举报
回复
我知道的有这么几种方法 :
1. 虽说CWinThread 是界面线程 但是你还是可以用它来运行后台的程序
在这里CWinThread 的run 函数最后不要在子类中扩展 这样你能保证程序的正常运行
这种方法 是完完全全的window 消息传递机制
2 . 在线程的入口函数中写while(1)之类的死循环来让线程永远运行下去
3. 事件机制 就是WaitForSingleObject(urHandle,-1)
4 可以写代码在onIdle() 函数中 这就是你可以控制的cpu空闲的代码

15,471

社区成员

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

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