在C中暂停除sleep()之外的主线程执行

时间:2011-08-14 19:31:19

标签: c

我需要暂停执行主线程而不使用sleep语句。 是否有任何函数或状态值显示其他线程的活动状态,如java中的isalive()?

4 个答案:

答案 0 :(得分:3)

pause()经常运作良好;它暂停执行直到收到信号。

答案 1 :(得分:1)

标准C无法暂停主线程,因为标准C没有线程概念。 (C201X中的情况发生了变化,但标准的新版本尚未完成,并且没有实现。)

偶数sleep()(这是一个函数,而不是语言定义的语句)是特定于实现的。

因此,如果不知道您正在使用什么环境,就无法回答您的问题。你有多个线程吗?如果是这样,你使用什么线程库? PthreadsWin32 threads?

为什么sleep()不符合您的要求? (可能是因为它会暂停所有线程,而不仅仅是当前线程。)

(提示:每当你问“如何在不使用Y的情况下做X?”时,请告诉我们为什么你不能使用Y.)

请参阅您正在使用的任何线程库的文档。它应该提供满足您需求的功能。

答案 2 :(得分:0)

一种非常简单的方法是使用像getchar()这样简单的东西。

其他方法可能是等待pthread_cond_wait的信号(或不同线程API中的任何其他类似函数)。

其他方法可能是紧密循环并使用信号量(或类似全局变量值之类的东西)等待其他线程完成。

无论如何,有几种选择。你没有详细说明你的问题,告诉你这里最好的选择。

答案 3 :(得分:0)

select()通常是一个不错的选择。

在Linux上,epoll()通常是select()的一个很好的替代方案。

每个程序,“线程”与否,总是有“主线程”。但是,如果您实际使用的是线程,请查看pthread_cond_wait().