pthread sleep()函数停止整个执行

时间:2014-09-29 01:58:27

标签: c++ pthreads sleep

我正在编写一个多线程c ++程序,遵循我用于测试的简单函数。如果我在那里注释掉sleep(),该程序将起作用。但是如果我把sleep()放在循环中,屏幕上就没有输出,看起来sleep()会杀死整个执行。请帮忙。 sleep函数是否会终止pthread程序的执行?我该怎么睡觉呢?

void *shop(void *array){
int second = difftime( time(0), start );

// init shopping list with characters
string *info = (string *)array;
int size = stoi(info[0]);
string character = info[1];
string career = info[2];

if ( career == "Auror" ) {
    int process = 3;
    while (process < size+1) {
        int shop = stoi(info[process]);
        pthread_mutex_lock(&counter);
        cout << process << endl;
        sleep(1);
        pthread_mutex_unlock(&counter);
        process++;
    }
}

没有睡眠的输出是:

3
4
5
6
3
4
5
6

sleep()的输出如下:

3
3

它打破了while循环。

2 个答案:

答案 0 :(得分:1)

让主线程等待子线程通过pthread_join完成其任务。 pthread_join()函数等待线程指定的线程终止。如果该线程已经终止,则pthread_join()立即返回。线程指定的线程必须是可连接的。

答案 1 :(得分:-2)

是的,如果主线程死了,你的应用就会死掉,包括所有&#34;工作线程&#34;。

在主线程中添加getchar()system("pause")或其他任何内容。