关于SendMessage耗时的问题 sendmessage等待返回,使用postmessage试试 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我在操作日志文件,用postmessage的话,很容易把日志写乱的,而日志的顺序又非常重要 而且换成postmessage有时也会费时上百毫秒的 测试一下long bin = clock();SendMessage(...);long end = clock() - bin;end应该为SendMessage所占用的CPU时钟频率 我实测过的。执行PostMessage的时间大部分为0毫秒,但常能出现15-16毫秒,偶尔更能上百毫秒dw1 = GetTickCount();theApp.m_pMainWnd->PostMessage(WM_SENDINFO, (WPARAM)sData, 0);dw2 = GetTickCount();耗时=dw2-dw1 dw1 = GetTickCount();theApp.m_pMainWnd-> PostMessage(WM_SENDINFO, (WPARAM)sData, 0);dw2 = GetTickCount();如果其中发生一次线程上下文切换 根据记录显示,有一次sendMessage耗时280毫秒,可在SendMessage的响应函数中只执行了16毫秒就返回了,完全搞不清其余时间消费在哪里了. 根据记录显示,有一次sendMessage耗时280毫秒,可在SendMessage的响应函数中只执行了16毫秒就返回了,完全搞不清其余时间消费在哪里了.=================================================很明显是消耗在线程上下文切换,还有其他线程的执行时间上了,参考下面流程:线程调用sendmessage,陷入内核,进行线程上下文切换,该线程阻塞内核检查查找sendmessage的目标线程,期望将其调度起来执行调度器判断存在比目标线程更需要执行的线程,先将其调度起来执行先执行的线程耗尽时间片,调度器选择目标线程执行目标线程执行完毕,向内核返回,内核向调用线程返回结果,切换回去,解阻塞 可该线程的级别我已经设置到了THREAD_PRIORITY_HIGHEST,而且还有更长的780毫秒 stoneyrh 说不时时写日志,我也想啊,但是要求程序始终都在执行,也就是说没有空闲时间,我一个小时可以写5-6M,都放在缓存里,运行2天就不成了。 根据记录显示,有一次sendMessage耗时280毫秒,可在SendMessage的响应函数中只执行了16毫秒就返回了,完全搞不清其余时间消费在哪里了. ================================================= 很明显是消耗在线程上下文切换,还有其他线程的执行时间上了,参考下面流程: 线程调用sendmessage,陷入内核,进行线程上下文切换,该线程阻塞 内核检查查找sendmessage的目标线程,期望将其调度起来执行 调度器判断存在比目标线程更需要执行的线程,先将其调度起来执行 先执行的线程耗尽时间片,调度器选择目标线程执行 目标线程执行完毕,向内核返回,内核向调用线程返回结果,切换回去,解阻塞================================================= 时间片也不该那么长,我用postMessage,都有2,3百毫秒返回的,就算再差的计算机,时间片也可能达到10ms啊 错了,时间片也不该那么长,我用postMessage,都有2,3百毫秒返回的,就算再差的计算机,时间片也不可能达到10ms啊 我单做了个线程,只用sendmessage更新日志,结果发现最长也就16毫秒,看来应该是这个流程里的其他步骤影响了sendmessage的时间,可是结果全都正确,我的程序又怎么会影响到sendmessage那? sendMessage发送的消息,要等到执行返回后才可以继续往下执行,所以消息在消息队列里便等待的时间不同,程序执行时间也就不同了 超大图像的分块显示 非模态对话框不能添加控件(button,static...) 笔刷功能 Oracle数据库插入性能问题 拦截数据 请问谁能介绍一些开发控件的好书或资料? CRecordset的问题! 消息映射的一个问题 流程图的作用? 网络协议相关 如何让一个程序的闪屏不显示? 如何用代码实现dxdiag中的显卡中的directdraw硬件加速和声卡硬件完全加速?
long bin = clock();
SendMessage(...);
long end = clock() - bin;
end应该为SendMessage所占用的CPU时钟频率
theApp.m_pMainWnd->PostMessage(WM_SENDINFO, (WPARAM)sData, 0);
dw2 = GetTickCount();
耗时=dw2-dw1
theApp.m_pMainWnd-> PostMessage(WM_SENDINFO, (WPARAM)sData, 0);
dw2 = GetTickCount();如果其中发生一次线程上下文切换
=================================================
很明显是消耗在线程上下文切换,还有其他线程的执行时间上了,参考下面流程:线程调用sendmessage,陷入内核,进行线程上下文切换,该线程阻塞
内核检查查找sendmessage的目标线程,期望将其调度起来执行
调度器判断存在比目标线程更需要执行的线程,先将其调度起来执行
先执行的线程耗尽时间片,调度器选择目标线程执行
目标线程执行完毕,向内核返回,内核向调用线程返回结果,切换回去,解阻塞
=================================================
很明显是消耗在线程上下文切换,还有其他线程的执行时间上了,参考下面流程: 线程调用sendmessage,陷入内核,进行线程上下文切换,该线程阻塞
内核检查查找sendmessage的目标线程,期望将其调度起来执行
调度器判断存在比目标线程更需要执行的线程,先将其调度起来执行
先执行的线程耗尽时间片,调度器选择目标线程执行
目标线程执行完毕,向内核返回,内核向调用线程返回结果,切换回去,解阻塞
=================================================
时间片也不该那么长,我用postMessage,都有2,3百毫秒返回的,就算再差的计算机,时间片也可能达到10ms啊