linux下的c++,线程有类似于进程wait的函数么?
线程A建立线程B、C,线程B sleep(30),线程C sleep(35),但是线程C可能被别的线程提前结束。要求线程A阻塞,直到B或者C结束,并且能判断出到底是B还是C结束了。
对于进程来说很容易实现,只要fork两次,让父进程wait(NULL)就可以了。其他进程可以通过kill来结束C,wait函数会返回结束的pid号码。
我的问题就是线程需要实现同样的功能,需要怎么做?其实是两个问题:
1.如何结束其他线程?(实现类似于kill的功能)
2.如何阻塞主线程,并且判断到底是B还是C线程结束了?(实现类似于wait(NULL)的功能)
求达人解惑
1.可以使用pthread_kill,向线程发送信号,通过信号处理结束线程.
C/C++ code:
int ThreadDelay(u_int32_t ms)
{
struct timeval sDelay;
sDelay.tv_sec = ms/1000;
sDelay.tv_usec = (ms%1000)*1000;
select(0,NULL,NULL,NULL,&sDelay);
return true;
}
2.可以使用select函数阻塞线程.
通过向线程发送信号0:pthread_kill(threadid,0)
根据返回值判断线程是否结束了
有个join()函数,具体你可以查一下怎么用,好长时间没用过了
boost的thread.join()函数。
windows的api可以用WaitForSingleObject,参数是你的线程句柄
int pthread_join(pthread_t th,void ** thread_return);
此函数挂起当前进程直到th指定的线程运行终止为止。
书上说:在多线程中似乎没有等待某个线程退出的方法。
谢谢大家的回复。
1楼的意思是用selec
相关问答:
写了个测试程序如下
struct hostent *hp;
char AlarmDevIP[20];
int x2;
hp = gethostbyname("www.google.com");
if (hp)
{
......
分别用结构化方法和面向对象方法编程实现下面要求:
对Circle和Rectangle实现以下功能Center,Move,Rotate,Print.
自己先订以下,这是一个刚学习计算机的人问我的
学习,看看
继续顶哦
学习了。
go o ......
我只学过清华蓝封面的C语言基础,想更深入的学习,该看什么书好?
C Primer Plus
C程序设计语言(第2版新版)
C语言程序设计_现代方法
C语言参考手册第五版
C语言大全
C和指针
C陷阱与缺陷
C专家编程
......
在根目录/lib中存放一个log.c,log.h,并用下面的语句:
gcc -c log.c
ar crv liblog.a log.o
编译出一个liblog.a静态库,然后在文件夹:/testfile中创建一个test.c和testc.c,test.c中引用了testc.c中定义的方法 ......