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 ......
现在需要在一个嵌入式系统中实现时间函数,编译器未提供time库函数,请问大家如何用c语言实现时间函数啊?
年月日时分秒 到 整数秒(从1970年开始) 之间的相关转换啊
类似mktime 和localtime的功能,谢谢
mktime ......
rt,我试了网上直连Acces数据库的方法,windows下没有问题,但是在linux下不行,谁能给点提示?谢谢
你怎么连的?
Acces数据库..
你怎么练的呢?
Java code:
static String DBDRIVER = "sun.jd ......
在根目录/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中定义的方法 ......