170 похожих чатов

Ребят, а возможно создать в отдельном классе отдельный поток, чтобы

при инициализации выполнялась какая-то функция, независимо от функции main? А то у меня получается, что я создаю новый поток через std::thread, в конструкторе класса вызываю функцию в другом потоке(как запланировано), а получается, что я сначала жду выполнения этой функции, а потом уже идет то, что в main. Поток один и тот же - через this_thread::get_id проверил. В общем, возможно ли в отдельном классе в конструкторе запускать отдельный поток? Если возможно, то как?
В конструкторе имею такую запись:
thread Thread(&className::methodName, this);

10 ответов

15 просмотров

создай обертку вокруг std::thread

А как инициализация вообще должна быть связана с функцией main ?

Ребят, а возможно создать в отдельном классе отдельный поток, да чтобы при инициализации выполнялась какая-то функция, независимо от функции main? Да А то у меня получается, что я создаю новый поток через std::thread, в конструкторе класса вызываю функцию в другом потоке(как запланировано), а получается, что я сначала жду выполнения этой функции, Шли код... В общем, возможно ли в отдельном классе в конструкторе запускать отдельный поток? Если возможно, то как? Можно. Шли код - поглядим.

Михаил- Автор вопроса
Ilya Zviagin
Ребят, а возможно создать в отдельном классе отдел...

https://pastebin.com/6S11dhRH Вот, ну знаю только пастебин как место для того, чтоб показывать код, не мог придумать ничего более удобного

Михаил
https://pastebin.com/6S11dhRH Вот, ну знаю только...

B::B() { value = 1; thread newThread(&B::waiting, this); newThread.join(); value = 0; } Ну так ты создал в конструкторе поток, запустил, и теперь ждёшь его завершения. Всё работает ровно как ты сам и написал...

Михаил- Автор вопроса
Ilya Zviagin
B::B() { value = 1; thread newThread(&B::w...

А как тогда быть с join? Как избавиться от этой проблемы?

Михаил
А как тогда быть с join? Как избавиться от этой пр...

Надо начать с того, чтобы не делать thread локальной переменной функции...

Михаил- Автор вопроса
Ilya Zviagin
Надо начать с того, чтобы не делать thread локальн...

Я решил проблему, спасибо. Сделал поле thread* Thread; В конструкторе Thread = new thread([this]{ this->waiting(); }); И в деструкторе Thread->join(); delete Thread;

Михаил
Я решил проблему, спасибо. Сделал поле thread* Th...

Это тоже не совсем правильно. Можно лучше

Михаил- Автор вопроса
Ilya Zviagin
Это тоже не совсем правильно. Можно лучше

ну на лучше я нагуглить я пока не смог, но оно вроде работает правильно, как и задумывалось

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта