多媒体定时器与多线程的问题

时间:2021-08-20 23:32:31
我写了一个多媒体定时器,每隔50ms屏幕输出一次,但是同时还有磁盘I/O操作,比如每次磁盘操作需要1s的时间,那么多媒体定时器就不是每隔50ms输出一次了,而是这1秒后同时输出20条数据了。我觉得应该是因为磁盘操作占用了100%cpu的问题,我想让定时器不受磁盘操作的影响,还是按时输出,是不是可以用多线程的方式解决?哪位高人能具体说一下?是在定时器的执行函数中开启新线程吗?

14 个解决方案

#1


在单cpu上,效果应该是一样,

#2


多线程可以的

#3


IO与刷新用不同的线程?

#4


我也不知道怎么做,哪位给个解决的办法?

#5


可以在Dialog OnCreate函数里面新建一个线程,线程的入口函数里面调用OnTimer消息。

#6


前提是在Dialog里OnCreate函数里面,新建线程之前要调用SetTimer(X,X,X)

#7


IO与刷新用不同的线程,就能够保证实时刷新吗?

#8


up

#9


晕,多媒体定时器本来就是另一个线程啊。检查你的输出函数先。

#10


多媒体定时器已经独立占一个线程了(在系统内部分配了个新线程给它),按理定时还是比较准确(比SetTimer)的,一定是你那里弄错了

#11


没有啊,我用晶振频率来定时,就没有出现问题,不过cpu始终占100%。多媒体定时器定时当然准确,但是会出现我所说的问题,哪位高人解惑一下...

#12


up

#13


不知道你的IO操作是不是在定时器的回调函数中执行的
如果是的话应该是无法实现的,MSDN上有说回调函数执行时间不能大于定时器间隔
呵呵,也可能理解错了LZ的意思

#14


引用 10 楼 hurryboylqs 的回复:
多媒体定时器已经独立占一个线程了(在系统内部分配了个新线程给它),按理定时还是比较准确(比SetTimer)的,一定是你那里弄错了

#1


在单cpu上,效果应该是一样,

#2


多线程可以的

#3


IO与刷新用不同的线程?

#4


我也不知道怎么做,哪位给个解决的办法?

#5


可以在Dialog OnCreate函数里面新建一个线程,线程的入口函数里面调用OnTimer消息。

#6


前提是在Dialog里OnCreate函数里面,新建线程之前要调用SetTimer(X,X,X)

#7


IO与刷新用不同的线程,就能够保证实时刷新吗?

#8


up

#9


晕,多媒体定时器本来就是另一个线程啊。检查你的输出函数先。

#10


多媒体定时器已经独立占一个线程了(在系统内部分配了个新线程给它),按理定时还是比较准确(比SetTimer)的,一定是你那里弄错了

#11


没有啊,我用晶振频率来定时,就没有出现问题,不过cpu始终占100%。多媒体定时器定时当然准确,但是会出现我所说的问题,哪位高人解惑一下...

#12


up

#13


不知道你的IO操作是不是在定时器的回调函数中执行的
如果是的话应该是无法实现的,MSDN上有说回调函数执行时间不能大于定时器间隔
呵呵,也可能理解错了LZ的意思

#14


引用 10 楼 hurryboylqs 的回复:
多媒体定时器已经独立占一个线程了(在系统内部分配了个新线程给它),按理定时还是比较准确(比SetTimer)的,一定是你那里弄错了