Trong đoạn mã sau đây tôi tạo ra một số chủ đề, và mỗi chủ đề ngủ trong một vài giây.làm cho chương trình chính chờ đợi cho các chủ đề để kết thúc
Tuy nhiên chương trình chính của tôi không đợi cho các chủ đề kết thúc, tôi đã được giả định rằng các chủ đề sẽ tiếp tục chạy cho đến khi chúng tự hoàn thành.
Có cách nào đó việc tạo chuỗi tiếp tục chạy ngay cả khi chuỗi cuộc gọi kết thúc.
#include <pthread.h>
#include <iostream>
#include <cstdio>
#include <cstdlib>
int sample(int min,int max){
int r=rand();
return (r %max+min);
}
void *worker(void *p){
long i = (long) p;
int s = sample(1,10);
fprintf(stdout,"\tid:%ld will sleep: %d \n",i,s);
sleep(s);
fprintf(stdout,"\tid:%ld done sleeping \n",i,s);
}
pthread_t thread1;
int main(){
int nThreads = sample(1,10);
for(int i=0;i<nThreads;i++){
fprintf(stderr,"\t-> Creating: %d of %d\n",i,nThreads);
int iret1 = pthread_create(&thread1, NULL, worker, (void*) i);
pthread_detach(thread1);
}
// sleep(10);//work if this is not commented out.
return 0;
}
Cảm ơn
Edit:
Xin lỗi vì không làm rõ, là nó có thể không giữ một cách rõ ràng theo dõi các chủ đề hoạt động hiện tại của tôi và bằng cách sử dụng tham gia.
Nếu đây là một giao diện người dùng đồ họa, vâng điều này cũng đúng vì có một vòng lặp tin nhắn. Bạn phải có một điều kiện để tiếp tục chạy cho đến khi tất cả các luồng được hoàn thành chẳng hạn như tham gia. –