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
相关问答:
如题,C/C++中的execl怎么调用写好的java程序,
execl("/opt/java1.5/bin/java","MyClass",NULL);
这样的不行哦。
不会.
运行java程序
找工具查看一下那个程序的命令行
搜索下:jni ......
分别用结构化方法和面向对象方法编程实现下面要求:
对Circle和Rectangle实现以下功能Center,Move,Rotate,Print.
自己先订以下,这是一个刚学习计算机的人问我的
学习,看看
继续顶哦
学习了。
go o ......
VC6.0不能用,VS系列太大,能不能推荐几款小巧的C/C++的IDE
没有。楼下的垃圾回答
http://topic.csdn.net/u/20100105/09/c854cc79-c8b0-4c1a-a8cf-9ab001ab13a5.html?76698
VC6.0我windows7能用
其他的
DEV ......
请我用FCK上传文件,在本地的windows机上测试可以,但部署到linux服务器上就上传不了文件,上传文件时一直卡在那里。望各位大虾指点,谢谢!
路过,帮你顶一下。。。。。。。。。。。。。。
上传文件的路径问题, ......
在根目录/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中定义的方法 ......