易截截图软件、单文件、免安装、纯绿色、仅160KB

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


相关问答:

linux环境下gethostbyname函数问题 - C/C++ / C语言

写了个测试程序如下
   
  struct hostent *hp; 
char AlarmDevIP[20];  
  int x2;

hp = gethostbyname("www.google.com");
if (hp)
{ ......

高分求!最好是C/C++ - C/C++ / C语言

分别用结构化方法和面向对象方法编程实现下面要求:
对Circle和Rectangle实现以下功能Center,Move,Rotate,Print.
自己先订以下,这是一个刚学习计算机的人问我的


学习,看看

继续顶哦

学习了。

go o ......

C的学习途径 - C/C++ / 新手乐园

我只学过清华蓝封面的C语言基础,想更深入的学习,该看什么书好?
C Primer Plus
C程序设计语言(第2版新版)
C语言程序设计_现代方法
C语言参考手册第五版
C语言大全
C和指针
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中定义的方法 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号