在运行时更改当前未使用的类实现

时间:2013-12-22 18:48:53

标签: c++ visual-c++ visual-studio-2008 runtime

我有一个C ++代码正在大文件(约15 GB)上执行。代码有两个阶段,第一阶段需要很长时间才能完成。但同时我的第2阶段有更好的实现技术,并且不想从一开始就重启整个执行。这两个阶段按实际使用的两个类别进行分类。从中得出一个想法:

Parser.parse(filePath);    // phase one
Processor.processAndLog(); // phase two

那么,是否有一些方法可以在开始执行之前更改Processor类的实现?第1阶段的结束(或者甚至已经完成了多少)可以与我打印的一些不时的消息(比如日志)区分开来。

2 个答案:

答案 0 :(得分:0)

如果Processor.processAndLog是成员函数指针,则可以在调用之前随时更改它。

另一种方法是让Processor.processAndLog成为其他函数的包装函数 - 一个调度函数。

还有挂钩功能的问题。那里有一个名为detours的图书馆。仅当您无法在程序中更改源代码时才使用此功能。

答案 1 :(得分:0)

因此,如果我理解正确:您有一个当前正在运行的程序,但尚未执行特定类中的代码。并且您希望找到一种更新它的方法,以便在不停止程序的情况下为该类使用新版本的代码。

理论上可以做到。但在实践中,它可能比它的价值更麻烦,特别是如果这是一次性的需要。 C ++不是为这种东西设计的。这并不是简单的人类可读源代码可以轻易地覆盖在进程的内存中。

正确地做这件事几乎肯定需要花费大量的时间和精力,很可能涉及大量的实验和追踪错误。如果你弄错了(这可能是第一次),那么你可能只是破坏了你的过程和结果,因此无论如何都需要重新启动它。

我不知道您的流程目前需要多长时间,但是在构建新版本的程序后,尝试计算如何实现这个想法可能需要花费更多时间,而不仅仅是重新启动流程。