我没有处理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;
}
主线程通常是控制其他线程的线程。如果您需要等到所有其他线程都完成,为什么不从主线程监视它们呢。创建另一个线程来控制主线程似乎是一个设计缺陷。