ACE_Task中的getq听说取不到会阻塞,那么怎么终止这个阻塞的线程?

qhgary 2007-03-17 02:38:01
比如某个ACE_Task的继承类实现了一个自己的svc,在这个svc里面会不断的check是否有消息,所以会在一个while(1)的循环里面getq.但是这样好像有一个问题,就是这个线程如何终止呢?如果消息队列为空,getq取不到而阻塞,又如何终止这个线程呢?
...全文
1165 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhgary 2007-03-17
  • 打赏
  • 举报
回复
还有putq的阻塞怎么处理呢?
qhgary 2007-03-17
  • 打赏
  • 举报
回复
另外:
返回-1后, 如何判断消息队列的状态是否为ACE_Message_Queue_Base::DEACTIVATED?
如果返回-1,但是消息队列不为这个值那又说明什么呢?
qhgary 2007-03-17
  • 打赏
  • 举报
回复
谢谢,还有一个相关的问题,对于ace_message_block,是不是里面什么类型的数据都可以放,只要用char*强制转换一下就可以了?取出来的时候通过什么呢?base()?还是rd_ptr()?

另外,如果我看见默认的支持有一些MB_...的消息,这些消息都是针对线程本身的么?如果我既想让这些消息中有线程控制相关,又想让另外一部分消息能够携带数据,怎么做?

对于ace_message_data的数据需要手工delete么?还是在ace_message_block上调用release以后,会自动释放所有空间?
foochow 2007-03-17
  • 打赏
  • 举报
回复
返回-1后判断消息队列的状态是否为ACE_Message_Queue_Base::DEACTIVATED,然后return
foochow 2007-03-17
  • 打赏
  • 举报
回复
msg_queue()->deactivate();
改变消息队列的状态,getq返回-1

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧