Введение
Допустим, у меня есть приложение на C ++ со встроенным скриптом Python.Скрипт выполняет некоторые сложные вычисления, которые требуют значительного времени для завершения.Я могу извлечь результат сценария, когда он закончен.Однако было бы удобно узнать, каково действительное время расчета - это 10% или, может быть, половина работы уже выполнена?Вот пример кода (с использованием boot python
):
app.cpp
#include <iostream>
#include <boost/python.hpp>
using namespace boost::python;
int main()
try
{
Py_Initialize();
object module = import("__main__");
object name_space = module.attr("__dict__");
exec_file("Script.py", name_space, name_space);
object MyFunc = name_space["MyFunc"];
object result = MyFunc();
double sum = extract<double>(sum);}
Py_Finalize();
Script.py
def MyFunc():
cont = 0
while (cont < 10000):
#...some calculations here, increasing "result" value on each step...
cont +=1
return result
Проблема
Если бы весь код был на C ++, я мог бы использовать встроенные инструменты фреймворка, такие как emit
, чтобы получить доступ к слоту индикатора выполнения GUI и обновить его значение.Но что в случае, описанном выше?В консольном приложении я мог печатать cont
каждый раз, прямо с python.Однако это не решение для любого C ++ с GUI.Есть ли способ определить, на уровне кода C ++, на каком этапе цикла выполняется Script.py
?Или, может быть, есть какое-то другое решение, чтобы обслуживать индикатор?