为什么信号量无法打断阻塞函数??

Jales 2008-02-29 07:54:48
我用一个Ctrl+c信号来打断 读取消息队列的阻塞函数,在以往的一些Red linux系统中,都没什么问题,而我又装了一台Red linux系统,程序在这台机器上不能很好的运行,就是因为Ctrl+c信号没有打断 读取消息队列的这个阻塞函数 。


bool bstop = false;
void msgDeal(void* nqueue){

while(!bstop){
//读取消息队列(阻塞函数)
}
}

void signalDeal(int signal){
bstop = true;
}

int main(){
signal(SIGINT, signalDeal);
signal(SIGTERM, signalDeal);
//。。。。。
//启动线程
}

上面就是我的程序的基本结构,信号的目的就是利用Ctrl+c可以把整个进程关闭,可是在以前没有出现过信号不能打断阻塞函数的问题,请高手帮忙看一下,谢了
...全文
82 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qmm161 2008-03-03
  • 打赏
  • 举报
回复
看错了,不过linux里面信号量是这样用的吗?
qmm161 2008-03-03
  • 打赏
  • 举报
回复
既然用了 signal 为什么不用 wait ?
Chappell 2008-03-03
  • 打赏
  • 举报
回复
up
taodm 2008-03-03
  • 打赏
  • 举报
回复
读取消息队列(阻塞函数)可以说一定有"超时"参数项.不要使用死阻塞版本.
jaymin 2008-02-29
  • 打赏
  • 举报
回复
ctrl+c?
ctrl+d?
crabboy123 2008-02-29
  • 打赏
  • 举报
回复
你的程序有问题,你的阻塞函数一直使线程中断在一点上,即使你的bstop值改变了,但是线程函数并没有判断的机会。
arong1234 2008-02-29
  • 打赏
  • 举报
回复
volatile bool bstop = false;

因为变量被载入寄存器后,优化后系统不再每次都去读变量了,而只用寄存器内的值,需要加volatile确保它每次都读
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-02-29 07:54
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下