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)
{
......
如题,C/C++中的execl怎么调用写好的java程序,
execl("/opt/java1.5/bin/java","MyClass",NULL);
这样的不行哦。
不会.
运行java程序
找工具查看一下那个程序的命令行
搜索下:jni ......
咨询QQ:269562808
bzip2recover
功能说明:用来修复损坏的.bz2文件。
语法:bzip2recover[.bz2压缩文件]
补充说明:bzip2是以区块的方式来压缩文件,每个区块视为独立的单位。因此,当某一区
块损坏时,便可利 ......
现在需要在一个嵌入式系统中实现时间函数,编译器未提供time库函数,请问大家如何用c语言实现时间函数啊?
年月日时分秒 到 整数秒(从1970年开始) 之间的相关转换啊
类似mktime 和localtime的功能,谢谢
mktime ......