Задать вопрос
@Uncle_Savva

Как продолжить выполнение кода, не дожидаясь завершения потока?

У меня не получается запустить несколько потоков, чтобы каждый из них выводил индивидуальное число, так как после запуска первого потока код "замерзает", и ждет окончания этого первого потока.

#include <iostream>
#include <thread>
#include <vector>;

using namespace std;

void go(int p) {
	while (1) {
		cout << p << endl;
	}
}

void main() {
	
	for (int i = 0; i <= 2; i++) {
		thread a(go, i);
		a.join();
		cout << 123;
	}
}
  • Вопрос задан
  • 165 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Академия Codeby
    Курс «Введение в Реверс инжиниринг»
    1 месяц
    Далее
  • Академия Codeby
    Курс «Реверсивный инжиниринг ПО под ОС Windows»
    26 недель
    Далее
Пригласить эксперта
Ответы на вопрос 4
zagayevskiy
@zagayevskiy
Android developer at Yandex
Сохрани потоки куда-нибудь, и затем на каждлм из них сделай join. Именно он ждёт завершения.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
типа того:
#include <iostream>
#include <thread>
#include <vector>;

using namespace std;

void go(int p) {
  while (1) {
    cout << p << endl;
  }
}

void main() {
  thread *t[3];

  for (int i = 0; i <= 2; i++) {
    t[i] = new thread(go, i);
    cout << 123;
  }
  for (int i = 0; i <= 2; i++) {
    t[i]->join();
    delete t[i];
  }
}
Ответ написан
Комментировать
Используй метод detach() вместо join.
Ответ написан
maaGames
@maaGames
Погроммирую программы
join - дожидается завершения потока
detach - отвязывает поток и пускает в свободное плавание
Но при detach придётся после цикла дожидаться окончания потоков, чтобы из main не вышло раньше времени.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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