双线程问题

atuwang 2010-04-16 05:39:34
在MFC中,定义两个Timer,m_nTimer1,m_nTimer2,
m_nTimer1=SetTimer(1,100,NULL);
m_nTimer2=SetTimer(2,50 ,NULL);
m_nTimer1用来捕捉640*480的图片,m_nTimer2用来放音乐,由于m_nTimer1所需时间比较长,导致m_nTimer2被延迟,造成音乐断断续续的,若用多线程,请问如何解决。或者有其他解决办法的也可,谢谢!
...全文
402 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
luckzengwei 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yaozhiyong110 的回复:]
引用 15 楼 luckzengwei 的回复:
不建议使用LS的采用定时器的方式来调用多线程,原因很简单,采用定时器如果调用的是开辟线程函数将会一直开辟线程将会给系统造成很大负担,影响软件系统的健壮性。如果调用子线程函数就显得没什么必要啦,既然采用了多线程还用定时器来做完全是多此一举。
LZ之所以出现上述的问题应该是你采用两个定时器函数都是在主线程里面的,而你希望的是两个功能能够基本上同步实……
[/Quote]
子线程里面调用了定时器,你在定时器函数里面操作的是啥子?难道不是开辟新线程,让新线程操作。如果是的话,那你在定时器里面进行线程操作完全就是画蛇添足,子线程可以实现你定时器的功能,而且效果绝对比定时器好。再定时器里面还来调用线程的一些处理肯定会造成负担的.ni nam_nTimer1=SetTimer(1,100,NULL);放在主线程里面间隔时间0.1秒,如果0.1秒后放一次CPU的时间片再操作
m_nTimer2=SetTimer(2,50 ,NULL);效果肯定不好撒。你直接开两个子线程,设个变量让其一直处于运行状态,不用定时器,做好线程同步就可以啦不更好,让子线程互相切换就得啦。
AIHANZI 2010-04-29
  • 打赏
  • 举报
回复
创建2个线程,,进行同步
SetTimer 只是产生个消息
dns007 2010-04-20
  • 打赏
  • 举报
回复
路过 mark 帮顶。。。
尹成 2010-04-20
  • 打赏
  • 举报
回复
创建一个线程,用多线程并行处理
xyzjanker 2010-04-19
  • 打赏
  • 举报
回复
搞两个线程,处理好线程同步就可以啦!!!!!!!!!11
yaozhiyong110 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 luckzengwei 的回复:]
不建议使用LS的采用定时器的方式来调用多线程,原因很简单,采用定时器如果调用的是开辟线程函数将会一直开辟线程将会给系统造成很大负担,影响软件系统的健壮性。如果调用子线程函数就显得没什么必要啦,既然采用了多线程还用定时器来做完全是多此一举。
LZ之所以出现上述的问题应该是你采用两个定时器函数都是在主线程里面的,而你希望的是两个功能能够基本上同步实现,但是第一个定时器函数里面的操作耗时较多就会让你的……
[/Quote]

什么叫 采用定时器如果调用的是开辟线程函数将会一直开辟线程将会给系统造成很大负担?

开辟线程不能控制? 每次进OnTimer都开新线程? 从头到尾就是开辟了一个新线程处理m_nTimer1
的 主程序处理m_nTimer2 理解我的意思?
luckzengwei 2010-04-19
  • 打赏
  • 举报
回复
不建议使用LS的采用定时器的方式来调用多线程,原因很简单,采用定时器如果调用的是开辟线程函数将会一直开辟线程将会给系统造成很大负担,影响软件系统的健壮性。如果调用子线程函数就显得没什么必要啦,既然采用了多线程还用定时器来做完全是多此一举。
LZ之所以出现上述的问题应该是你采用两个定时器函数都是在主线程里面的,而你希望的是两个功能能够基本上同步实现,但是第一个定时器函数里面的操作耗时较多就会让你的第二个定时器函数一直处于等待状态。
所以我建议LZ开辟两个子线程,处理好线程通信、线程同步还有多线程的中断(如果你有诸如不同按钮之类实现类似功能这个当然还是得处理的)的问题,应该就可以解决LZ的问题啦
liwei3290 2010-04-19
  • 打赏
  • 举报
回复
创建2各线程比较好
linfeng000d 2010-04-19
  • 打赏
  • 举报
回复
SetTimer 产生的是个消息,每隔一段时间会暂停。。所以就会出现你那种现象了
应该用 CreateThread 创建线程
atuwang 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangli820 的回复:]

AfxBeginThread 创建两个线程
[/Quote]
两个线程如何循环呢?
摄像头采集和音乐播放都得循环进行的
yaozhiyong110 2010-04-18
  • 打赏
  • 举报
回复
既然 m_nTimer1 处理的时间比较长 那在OnTimer里就起个新线程来处理m_nTimer1 的事件
处理完了通知主程序就是了 这样就不会让m_nTimer2 断断续续了
wangli820 2010-04-17
  • 打赏
  • 举报
回复
AfxBeginThread 创建两个线程
atuwang 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bragi523 的回复:]

你可以在ontimer里面加个线程处理
只开一个线程
每次通过事件告诉线程执行
[/Quote]
可以具体些嘛,谢谢!
atuwang 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 littlefangmfc 的回复:]

造成断断续续的是因为你的两个定时器实际上都在发消息,进入一个消息队列,属于一个UI线程,不太明白你要实现一个什么样的功能,你可以开两个线程,一个读图片,一个放音乐,如果二者之间有关联,就用变量来控制,做好变量的同步保护就好了。具体如何开线程,很简单,你在论坛上搜一下就知道了
[/Quote]
功能是在播放音乐的同时能够捕捉视频,这两个同时进行
littlefangMFC 2010-04-16
  • 打赏
  • 举报
回复
造成断断续续的是因为你的两个定时器实际上都在发消息,进入一个消息队列,属于一个UI线程,不太明白你要实现一个什么样的功能,你可以开两个线程,一个读图片,一个放音乐,如果二者之间有关联,就用变量来控制,做好变量的同步保护就好了。具体如何开线程,很简单,你在论坛上搜一下就知道了
acdbxzyw 2010-04-16
  • 打赏
  • 举报
回复
帮顶。。
Eleven 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bragi523 的回复:]
你可以在ontimer里面加个线程处理
只开一个线程
每次通过事件告诉线程执行
[/Quote]
up。。。
bragi523 2010-04-16
  • 打赏
  • 举报
回复
你可以在ontimer里面加个线程处理
只开一个线程
每次通过事件告诉线程执行
Yofoo 2010-04-16
  • 打赏
  • 举报
回复
SetTimer 产生的是个消息, 是同一个线程
应该用 CreateThread 创建线程

15,471

社区成员

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

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