我的程序中有两个独立的线程,我想创建一个线程(比如Thread1)来延迟5s,这样另一个线程(比如Thread2)就可以完成。但是它们并没有相互分叉,两者都是单独的子线程。我知道我可以使用delay()或sleep()但是我可以在Thread1中使用wait(5000)来延迟5s吗?或Wait()只能由父线程调用?
答案 0 :(得分:5)
来自wait手册:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
所有这些系统调用都用于等待a中的状态更改 呼叫过程的孩子,并获取有关孩子的信息 其状态发生了变化。状态变化被认为是: 孩子被终止;孩子被一个信号拦住了;或者孩子是 通过信号恢复。
因此,wait
使用指向整数(int(*)
)的指针,但这用于获取子项的返回状态。做wait(5000)
不会等待5秒。正如评论中@alk所述,这样做很可能使您的程序崩溃。
sleep
等待一定量的秒,但是如果Thread1
被中断的时间超过了这个时间(非常不太可能,但是谁知道...),你的sleep
将变得毫无用处。
要等待线程完成,您可以使用pthread_join。从它的手册:
int pthread_join(pthread_t thread, void **retval);
pthread_join()函数等待线程指定的线程 终止。如果该线程已经终止,那么 pthread_join()立即返回。线程指定的线程 必须可以加入。
使用pthread
系列函数时,请记得使用 -pthread 进行编译和链接。
您的问题是:可以等待()替换sleep()或延迟()吗?
答案:否。。