我用sendmessage向其他程序定时发消息,可是在WIN98下会有一点延时,WIN2000下就是好的!有没有办法解决?或者用其他方法代替!

sungu0 2002-11-25 09:44:26
()
...全文
41 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kmask 2002-12-01
  • 打赏
  • 举报
回复
应该是先天不足吧

能降低精度就降低精度吧,2K忙的时候,也会有延时
cnsccd1989 2002-12-01
  • 打赏
  • 举报
回复
同意“小可”。
继续关注学习。
sungu0 2002-12-01
  • 打赏
  • 举报
回复
我还想问一下,主线程能不能设置优先级?
cnsuyong 2002-11-29
  • 打赏
  • 举报
回复
如果你能把Windows多任务运行方式想象成为一个高速旋转的齿轮,只有转到最顶端的齿(任务)才会被处理,这时其他的齿(任务)都在休息。
那么,你就能明白发送消息有延时是不可避免的,只是感觉是否明显而已。
还有,计时器精度由CPU时钟频率决定,你固然可以认为计时器与你的消息延时没有因果关系,但计时器精度确实能反映最本质的东西:CPU到底能“转”多快,Windows到底能“转”多快。而这是消息必然延时的根本原因所在。
qiandeng 2002-11-28
  • 打赏
  • 举报
回复
问题解决如下
建立线程
设置线程的优先级为实时(最高的)
然后定时发送

在一般的情况下,cpu分配的时间片有限....,自然会延时

sungu0 2002-11-28
  • 打赏
  • 举报
回复
up
zqdshsy 2002-11-28
  • 打赏
  • 举报
回复
up
sungu0 2002-11-28
  • 打赏
  • 举报
回复
为什么大家都认为是记时器的问题呢,其实我在前面已经说的很明白了,记时器的误差很小了,主要是消息发送时产生的延时!
help me
Billy_Chen28 2002-11-27
  • 打赏
  • 举报
回复
BOOL QueryPerformanceFrequency(

LARGE_INTEGER *lpFrequency // address of current frequency
);
这个函数来做定时比多媒体定时器精度还要高!
sungu0 2002-11-27
  • 打赏
  • 举报
回复
是这样的,我以前也用过TIMER,可是发现时间不准后已经不用了,现在用的是
mmsystem里面的timesetevent and timekillevent
精度很高,大概只有2毫秒的误差,
以前用TIMER误差在20-56之间,
但是现在我的程序向其他程序发消息还是不能绝对准,98有时候准有时候不准
2000好些,只误差几毫秒,98有时候要迟30-100毫秒。有没有高手帮我,我希望98和2000一样准。
cnsuyong 2002-11-26
  • 打赏
  • 举报
回复
呵呵,楼主果然很细心。Win2K中和Win9x中的Timer,其精度有很大差异。(比如执行一次Sleep(1)实际上绝对不可能实现预期目的)。依稀记得在书上看到过,Win98中Timer的精度大概是60ms,WinNT和Win2K大约是20ms(可能数字有误,但数量级不会错)。也就是说,你在Win2K中执行一次Sleep(1),实际上至少要“睡”20ms。这不是延时,而是执行一次时钟唤醒处理所需的最小时间决定了时钟精度。因此,精确到毫秒就目前来说是不可能的。(如有人不信,可以用TTimer来试试,看看将Interval设置为1时在1000ms即1秒内能执行多少次。)
flyingkiller 2002-11-26
  • 打赏
  • 举报
回复
up
cgh1970 2002-11-26
  • 打赏
  • 举报
回复
up
sungu0 2002-11-26
  • 打赏
  • 举报
回复
不是这个问题,,,我需要在指定的时间发到其他程序,精确到毫秒,时间部分我用多媒体记时器没有问题,,主要是发消息出问题,因为2000和98的消息处理有点不一样,所以2000没有问题,我想知道有没有别的办法可以向其它程序发消息的函数或别的方法。
stanely 2002-11-25
  • 打赏
  • 举报
回复
postmessage可以立即返回,你试试!

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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