Я пытался получить постоянный объект из потока в течение нескольких часов. Я хочу написать разделяемую библиотеку на C ++, которая запускает постоянный l oop в функции. В следующих фрагментах кода есть класс Process. Процесс инициализирует интерфейс TCP / IP для чтения и записи данных из модели Simulink.
Это только для объявления и не должно быть важным для этой проблемы, но теперь вы знаете, о чем я говорю, когда упоминаю процессы.
main. cpp
Я знаю, это выглядит некрасиво / непрофессионально, но я довольно плохо знаком с C ++ ..
// frustrated attempt to make everything persistent
static vector<std::thread> processThreads;
static ProcessHandle processHandle;
static vector<std::promise<Process>> promiseProcess;
static vector<std::future<Process>> futureProcess;
EXPORT int initializeProcessLoop(const char *host, int port)
{
std::promise<Process> promiseObj;
futureProcess.push_back(std::future<Process>(promiseObj.get_future()));
processThreads.push_back(std::thread(&ProcessHandle::addProcess, processHandle, host, port, &promiseProcess[0]));
Process val = futureProcess[0].get();
processHandle.handleList.push_back(val);
return (processHandle.handleList.size() - 1);
}
ProcessHandle. cpp
Функция addProcess из ProcessHandle создает процесс, который должен быть постоянным, добавляет его к члену вектора STATIC c в ProcessHandle и передает обещание выполнению l oop.
int ProcessHandle::addProcess(const char *address, int port, std::promise<Process> * promiseObj) {
Process process(address, port);
handleList.push_back(process);
handleList[handleList.size() - 1].exec(promiseObj);
return handleList.size() - 1;
}
К основной проблеме сейчас ...
Если я изменю "initializeProcessL oop", чтобы включить:
if(processHandle.handleList[0].isConnected())
{
processHandle.handleList[0].poll("/Compare To Constant/const");
}
после того, как я нажал "val" для processHandle. handleList все работает нормально, и я могу опрашивать данные, как и должно быть.
Если я вместо этого опрошу их из - для проверки - основной функции, l oop вылетает внутри "initializeProcessL oop" потому что "Процесс Val" является ре назначенный (?) с futureProcess [0] .get ().
Как получить согласованность переменной Process и потока l oop после возврата из функции?
Если есть Есть какие-либо вопросы к коду (и я держу пари, что будет), не стесняйтесь спрашивать. Заранее спасибо!
PS: Обязательно "Engli sh не мой родной язык, прошу прощения за любые орфографические ошибки или gibberi sh" ...