我不明白这一点:在抛出' std :: length_error'的实例后终止调用

时间:2016-10-17 09:26:35

标签: c++ multithreading

首先,我不是英语,所以我会尽力解释。 我抛出这个线程,其中saludo意味着问候,延迟意味着延迟,数字意味着数字,我也创造了多次说这将发生的veces。所以我要做的是创建10个线程,它将在屏幕上显示5到15次,并且延迟从100到300,它们是一个数字(" Soy"数字),但我有那个我无法解决的错误。它适用于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(&saludo, "Soy  ", retardo, numero);
            P[i].join();
        }
    }

    cout << "Fin\n"; 
    return 0;
}

1 个答案:

答案 0 :(得分:3)

此错误是因为您可能已将负数传递给std :: string构造函数。如果rand() % 10为0,那么string tabs(numero - 1, '\t');可能会给numero这是一个问题。