Изменить текущую неиспользуемую реализацию класса во время выполнения

0

У меня есть C++ код, выполняющийся в большом файле (~ 15 ГБ). Код имеет две фазы, и для завершения первой фазы потребуется много времени. Но в то же время у меня есть лучший способ реализации для его фазы 2, и вы не хотите перезапускать все исполнение с самого начала. Эти две фазы классифицируются двумя фактически используемыми классами. Подумайте над этим:

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

Итак, есть ли способ изменить реализацию класса Processor до его запуска? Конец фазы 1 (или даже насколько он завершен) можно отличить от некоторых временных сообщений (скажем, журналов), которые я напечатал.

  • 0
    хорошо, если есть, ни один не рекомендуется
  • 0
    Будет полезно, если вы упомянете их.
Показать ещё 1 комментарий
Теги:
visual-c++
visual-studio-2008
runtime

2 ответа

0

Поэтому, если я правильно понимаю: у вас есть программа, которая в настоящее время запущена, но которая еще не получила выполнение кода в определенном классе. И вы хотите найти способ обновить его, чтобы использовать новую версию кода для этого класса, не останавливая программу.

Теоретически это можно сделать. Но на практике это, скорее всего, гораздо больше проблем, чем того стоит, особенно если это одноразовая потребность. C++ не был предназначен для такого рода вещей. Не похоже, что в памяти процесса есть просто читаемый человеком исходный код, который можно легко перезаписать.

Выполнение этого правильно почти наверняка займет значительное количество времени и усилий, скорее всего, будет связано с большим количеством экспериментов и ошибок и ошибок. Если вы что-то ошибаетесь (вероятно, в первый раз), вы, вероятно, просто испортили свой процесс и ваши результаты, и поэтому ему все равно придется его перезапустить.

Я не знаю, как долго длится ваш процесс, но попытка понять, как выполнить эту идею, может занять больше времени, чем просто перезапустить процесс после создания новой версии программы.

0

Если Processor.processAndLog является указателем на функцию-член, то вы можете изменить его в любое время до его вызова.

Альтернативой является то, что Processor.processAndLog будет функцией обертки для других функций - функцией отправки.

Там также вопрос о подключении функции. там библиотека называлась обходной. Используйте это, только если вы не можете изменить исходный код программы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню