#c #multithreading
#c #многопоточность
Вопрос:
Прежде всего, я не англичанин, поэтому я постараюсь объяснить как можно лучше. Я создаю этот поток, где saludo означает приветствие, retardo означает задержку, numero означает число, я также создаю veces для повторения много раз, что это произойдет. Итак, что мне нужно сделать, это создать 10 потоков, которые будут отображаться на экране от 5 до 15 раз и с задержкой от 100 до 300, что они являются числом («Соевое» число), но у меня есть эта ошибка, которую я вообще не могу решить. Он работает для 2-3 потоков, а затем останавливается. Спасибо, кстати.
#include <iostream>
#include <thread>
#include <string>
#include <chrono>
#include <time.h>
using namespace std;
void saludo(string m, int retardo, int numero) {
string tabs(numero - 1, 't');
cout << tabs << m << numero << "n";
this_thread::sleep_for(chrono::milliseconds(retardo));
}
int main() {
int nthread = 10;
srand(time(NULL));
thread P[nthread];
int i = 0;
while(i<nthread){
int retardo = rand() % 201 100;
int veces = rand() % 11 5;
for (int x = 0; x<veces; x){
int numero = rand() % 10;
P[i] = thread(amp;saludo, "Soy ", retardo, numero);
P[i].join();
}
}
cout << "Finn";
return 0;
}
Ответ №1:
Эта ошибка связана с тем, что вы, возможно, передали отрицательное число в конструктор std::string. rand() % 10
может дать 0. И вы делаете string tabs(numero - 1, 't');
это, что является проблемой, если numero
равно 0.