我正在编写一个多线程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循环。
答案 0 :(得分:1)
让主线程等待子线程通过pthread_join完成其任务。 pthread_join()函数等待线程指定的线程终止。如果该线程已经终止,则pthread_join()立即返回。线程指定的线程必须是可连接的。
答案 1 :(得分:-2)
是的,如果主线程死了,你的应用就会死掉,包括所有&#34;工作线程&#34;。
在主线程中添加getchar()
或system("pause")
或其他任何内容。