鼠标移动增加代码执行速度VB与C DLL

Mouse movement increases code execution speed VB with C DLL

本文关键字:VB DLL 速度 执行 移动 增加 代码 鼠标      更新时间:2023-10-16

我有一个旧的VB6程序,在C DLL的帮助下进行数值积分,也是在VS6中编译的。(是的,我知道我应该更新代码到。net等,但它只是工作。)最近,我尝试了一些比平时更复杂的计算,发现当鼠标在主窗体中移动时,程序运行得更快。也就是说,当给定一个特定的大型问题要集成时,如果在单击命令按钮后鼠标保持不动,则执行/集成大约需要5秒,但如果在不单击表单的情况下移动鼠标,则大约需要1秒。由于程序还对参数进行优化以拟合数据,因此这在进行拟合的总时间上产生了巨大的差异。

我做了一些工作来缩小影响的来源。鼠标移动确实会将CPU时钟频率从1600 MHz增加到2600 MHz,但这似乎不足以在单个线程上提供如此大的增加。在调试中,我发现集成例程执行VB的初始代码直到调用DLL没有延迟,大部分的计算时间是在传递变量后的DLL函数中度过的。DLL中的调试显示,大部分额外的时间花在数值例程的重复循环上,但是没有明显的理由说明鼠标移动会加快这些循环。

这只是加速CPU时钟频率的效果,尽管执行时间大大减少?或者还有其他的解释吗?

我希望它可能是windows偏向VB应用程序过程时,它可能会接收输入?听起来很随意!

尝试任务管理器->进程->右键单击应用程序->设置优先级->高

看看是否会产生类似的结果。

如果是,您可以通过几种方式设置程序的优先级,其中之一是使用START命令

开始使用批处理文件。
START   ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME] [/WAIT] [/B] [command / program] [parameters]

我终于找到了问题所在。事实证明,它与VB代码或处理速度无关,而是完全是DLL的c++代码中的问题。如果DLL执行需要很长时间,DLL中的If语句会查找系统消息,特别是允许用户取消执行(通过表单上的按钮)。在该序列中,GetMessage(&msg, NULL, 0,0)用于检查取消消息。GetMessage将等待,直到接收到系统消息,然后才允许继续执行。因此,在主窗体上移动鼠标是一种持续发送消息的简单方法,这将允许DLL以差不多全速的速度运行。在没有鼠标移动的情况下,它会挂起几秒钟,等待自动生成的系统消息触发。http://msdn.microsoft.com/en-us/library/windows/desktop/ms644936 (v = vs.85) . aspx

解决方案是使用PeekMessage(&msg, NULL, 0,0, PM_NOREMOVE)来检查发布的取消消息。PeekMessage将查找消息,如果没有消息,则允许立即继续执行主代码。http://msdn.microsoft.com/en-us/library/windows/desktop/ms644943 (v = vs.8almost5) . aspx

谢谢大家的建议。