1

我有用 C# 和 C++ 编写的不同应用程序,它们可以相互通信。我想用我写的一些场景来测试这个环境。

每个场景运行不同的时间。

有没有办法加速一切,以便让场景在几分钟内运行。

应用程序可能包含一些Thread.Sleep(...)或等效的 C++。

我的想法是 aThread.Sleep(2000)通常会等待 2 秒,但加速时它应该只等待 200 毫秒。

不幸的是,我无法更改或重构应用程序的代码。

我的第一个想法是在“加速 Windows”系统中运行应用程序。一种操作系统的包装器,时间运行得更快。但我不知道如何实现这一目标。

所以任何新的想法或解决方案都会很棒。

谢谢

4

1 回答 1

1

我不认为“让 Windows 运行得更快”是切实可行的,但我会考虑拦截 Sleep() 方法调用并将它们短路。我没看过,但 Thread.Sleep() 可能会在某个地方找到 Win32 API 或 NT API (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v= vs.85).aspx)。

您可以使用 Windows SDK 中的depends.exe 和调试器来查看您的代码使用什么,但我怀疑(除非您知道其他情况)它不仅仅是一个 Sleep() 调用,它更有可能是一个调用等待某个系统对象、I/O 或触发器,使用 WaitForMultipleObjectsEx() 和朋友。

看看 Microsoft Research 的 API 拦截 Detours http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx

Jeffry Richter 和 Matt Pietrek 也有关于这个主题的各种著作。事实上,这是一篇受其中一个启发的 codeproject 文章;

http://www.codeproject.com/Articles/5178/DLL-Injection-and-function-interception-tutorial

于 2012-10-11T10:18:11.053 回答