sc-> start_server运行一个无限循环,其中在一个线程中调用MyClass处理方法。 如何在main中替换while(true)语句,以便我的程序等待所有线程终止?
编辑:使用pthreads-lib而main()不知道pthread_t引用
THX
int main(int argc, char** argv)
{
SocketCommunication * sc = SocketCommunication::get_menu(); //Singleton
MyClass yay;
short port = 6644;
sc->start_server(port, &yay);
while(true);
return 0;
}
答案 0 :(得分:3)
通常的方法(至少在pthreads中)是:
pthread_t
对运行线程的引用。while
循环,等待所有线程完成类似于pthread_join(threadX, NULL);
的所有内容。在你的情况下,我没有看到任何获取线程的API,但是一旦你掌握了运行的线程(可能以某种方式询问sc
),代码就会类似。
修改强>:
如果您只是想等待一个条件,那么条件变量很容易。假设你有这些:
pthread_mutex_t end_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t condition_var = PTHREAD_COND_INITIALIZER;
bool all_threads_done = false; // Signals that all the threads are finalized
然后,在main()
中,您可以等待:
pthread_mutex_lock( &end_mutex );
while (!all_threads_done)
pthread_cond_wait( &condition_var, &end_mutex );
wait
将在等待时释放互斥锁。然后,在每个线程上,您必须具有以下内容:
// Do whatever the thread has to do...
// ...
// and then, at the end...
pthread_mutex_lock( &end_mutex );
if (no_more_threads()) // You have to figure this thing out to ensure no more threads
all_threads_done = true;
pthread_cond_signal( &condition_var );
pthread_mutex_unlock( &end_mutex );
最后请注意,即使你正在做一个while
,也不是忙碌的等待,因为主要线程在pthread_cond_wait
等待的大部分时间都在被唤醒当任何线程结束时。
答案 1 :(得分:0)
在您要等待的任何主题上使用join
。