(C++)如何挂起主线程,然后在其中恢复另一个线程



我没有处理Window的第一次关闭。我尝试了这里描述的技术:但没有成功。

基本上,我正在构建一个网络爬虫,它需要在输出结果之前挂起主线程。当我的最后一次pthread终止时,主线程需要恢复。我知道最后一次pthread死的时候,我只是不知道如何挂起或恢复主线程。

非常感谢您的帮助!

编辑:

所以,在我想挂起/恢复main的时候,可能只有一个工作线程。我在构造函数中进行,当我收集到更多链接时,线程就会产生。

在主线程中,在每个工作线程上调用pthread_join()

听起来像是一个基本的fork-join模型可以为您工作:

线程联接是一种协议,允许程序员收集所有逻辑同步点上的相关线程。例如,在fork-join并行性,派生线程来处理并行任务然后在完成它们的各自的任务(从而在连接处执行隐含的屏障点)。请注意,执行联接的线程已终止执行它们各自的线程函数。

来自同一文档后面的一个示例:

int main(int argc, char **argv) {  
    pthread_t thr[NUM_THREADS];  
    int i, rc;  /* create a thread_data_t argument array */  
    thread_data_t thr_data[NUM_THREADS];   /* create threads */  
    for (i = 0; i < NUM_THREADS; ++i) {    
        thr_data[i].tid = i;    
        if ((rc = pthread_create(&thr[i], NULL, thr_func, &thr_data[i]))) {      
            fprintf(stderr, "error: pthread_create, rc: %dn", rc);      
            return EXIT_FAILURE;    
        }  
    }  
    /* block until all threads complete */  
    for (i = 0; i < NUM_THREADS; ++i) {    
        pthread_join(thr[i], NULL);  
    }   
    return EXIT_SUCCESS;
} 

主线程通常是控制其他线程的线程。如果您需要等到所有其他线程都完成,为什么不从主线程监视它们呢。创建另一个线程来控制主线程似乎是一个设计缺陷。

相关内容

最新更新