при инициализации выполнялась какая-то функция, независимо от функции main? А то у меня получается, что я создаю новый поток через std::thread, в конструкторе класса вызываю функцию в другом потоке(как запланировано), а получается, что я сначала жду выполнения этой функции, а потом уже идет то, что в main. Поток один и тот же - через this_thread::get_id проверил. В общем, возможно ли в отдельном классе в конструкторе запускать отдельный поток? Если возможно, то как?
В конструкторе имею такую запись:
thread Thread(&className::methodName, this);
создай обертку вокруг std::thread
А как инициализация вообще должна быть связана с функцией main ?
Ребят, а возможно создать в отдельном классе отдельный поток, да чтобы при инициализации выполнялась какая-то функция, независимо от функции main? Да А то у меня получается, что я создаю новый поток через std::thread, в конструкторе класса вызываю функцию в другом потоке(как запланировано), а получается, что я сначала жду выполнения этой функции, Шли код... В общем, возможно ли в отдельном классе в конструкторе запускать отдельный поток? Если возможно, то как? Можно. Шли код - поглядим.
https://pastebin.com/6S11dhRH Вот, ну знаю только пастебин как место для того, чтоб показывать код, не мог придумать ничего более удобного
B::B() { value = 1; thread newThread(&B::waiting, this); newThread.join(); value = 0; } Ну так ты создал в конструкторе поток, запустил, и теперь ждёшь его завершения. Всё работает ровно как ты сам и написал...
А как тогда быть с join? Как избавиться от этой проблемы?
Надо начать с того, чтобы не делать thread локальной переменной функции...
Я решил проблему, спасибо. Сделал поле thread* Thread; В конструкторе Thread = new thread([this]{ this->waiting(); }); И в деструкторе Thread->join(); delete Thread;
Это тоже не совсем правильно. Можно лучше
ну на лучше я нагуглить я пока не смог, но оно вроде работает правильно, как и задумывалось
Обсуждают сегодня