@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;
	}
}
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 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 не вышло раньше времени.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы