线程里开定时器还是应该定时器里调用线程?

洗洗睡去 2013-10-09 03:47:44
后台进行串口的通讯,每次发送接收要500ms,打算定时1s获取一次数据,不用多线程可以实现了,就是拖的主界面比较卡,现在用多线程,应该用下面哪种方法呢?
1、主线程里开一个工作者线程,此工作线程里开定时器,定时通讯;
2、主线程定时器中断调用工作者线程。
给点意见?
...全文
5153 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
洗洗睡去 2013-10-10
  • 打赏
  • 举报
回复
引用 15 楼 VisualEleven 的回复:
最好是在线程中等有数据到达的时候再做,没数据的时候不占CPU资源
恩 应该这样 再试试
洗洗睡去 2013-10-10
  • 打赏
  • 举报
回复
解决了 传递的参数里加上一个变量判断就可以了
洗洗睡去 2013-10-10
  • 打赏
  • 举报
回复
引用 7 楼 hezhe1008 的回复:
在主线程里开一个线程,不停的接受消息 while(1) { while(读空消息) { } Sleep(1000); }
试了while(1) 程序关闭后会有内存泄漏 就是线程没关掉的原因 可是死循环里怎么关呢 线程又不能再接受消息了
Eleven 2013-10-10
  • 打赏
  • 举报
回复
最好是在线程中等有数据到达的时候再做,没数据的时候不占CPU资源
zhuben775 2013-10-10
  • 打赏
  • 举报
回复
定时器一般都是主线程开吧,在定时器里设置一个开关,在线程读取数据后关闭开关就可以了 while(1) { if(开关) { 。。。 开关=false; } }
hushoubo 2013-10-10
  • 打赏
  • 举报
回复
线程里面定时去操作串口撒,定时器和线程性质都差不多
洗洗睡去 2013-10-10
  • 打赏
  • 举报
回复
想了一晚上 线程里开定时器应该不是好办法 因为定时事件到了之后 程序还是在主线程里 还是线程里让它while(1)死循环那里比较好
_船长_ 2013-10-09
  • 打赏
  • 举报
回复
引用 10 楼 sunnyloves 的回复:
[quote=引用 5 楼 worldy 的回复:] 主线程里开一个工作者线程,此工作线程里开定时器,定时通讯; 让工作线程有事就干事,没事就睡觉,不影响住线程,主线程主要检查工作线程的标记,进行处理
道理我懂的 就是不知道线程里开定时器 会不会有什么不好的? 总感觉线程不是个完整的东西 [/quote] 定时器消息有一个问题就是,如果在处理一个WM_TIMER消息的时间超过1s的话,下一个WM_TIMER消息直到前一次处理完了才会产生,不知道楼主对于这种情况是否考虑到了,如果楼主忽略此种情况,整个定时器消息也不是不可吧!
洗洗睡去 2013-10-09
  • 打赏
  • 举报
回复
引用 5 楼 worldy 的回复:
主线程里开一个工作者线程,此工作线程里开定时器,定时通讯; 让工作线程有事就干事,没事就睡觉,不影响住线程,主线程主要检查工作线程的标记,进行处理
道理我懂的 就是不知道线程里开定时器 会不会有什么不好的? 总感觉线程不是个完整的东西
洗洗睡去 2013-10-09
  • 打赏
  • 举报
回复
引用 7 楼 hezhe1008 的回复:
在主线程里开一个线程,不停的接受消息 while(1) { while(读空消息) { } Sleep(1000); }
似乎是单片机里的做法 哈 应该也可以
洗洗睡去 2013-10-09
  • 打赏
  • 举报
回复
引用 3 楼 oyljerry 的回复:
开线程周期性做事情
线程里开定时器没什么问题的吧? 就当在主线程一样用?结束工作站线程的时候killtimer吗
呔妖怪来嘛 2013-10-09
  • 打赏
  • 举报
回复
在主线程里开一个线程,不停的接受消息 while(1) { while(读空消息) { } Sleep(1000); }
worldy 2013-10-09
  • 打赏
  • 举报
回复
引用 2 楼 hezhe1008 的回复:
为什么要开定时器?Sleep(1000);
那别的事情都不用干了
worldy 2013-10-09
  • 打赏
  • 举报
回复
主线程里开一个工作者线程,此工作线程里开定时器,定时通讯; 让工作线程有事就干事,没事就睡觉,不影响住线程,主线程主要检查工作线程的标记,进行处理
zhousitiaoda 2013-10-09
  • 打赏
  • 举报
回复
选1,功能独立点。 主线程定时器中断调用工作者线程。 ------------ 应该说主线程定时器里通知工作线程更准确点,要通知起码得要有个事件之类的,麻烦。
oyljerry 2013-10-09
  • 打赏
  • 举报
回复
开线程周期性做事情
呔妖怪来嘛 2013-10-09
  • 打赏
  • 举报
回复
为什么要开定时器?Sleep(1000);
modyaj 2013-10-09
  • 打赏
  • 举报
回复
选1

15,472

社区成员

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

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