找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 13384|回复: 20

线程挂起问题

[复制链接]
发表于 2009-9-14 20:42:32 | 显示全部楼层 |阅读模式
我想实现这样一个功能:有两个线程,其中一个线程可能在运行时被挂起,想用另一个线程检测其状态。于是我写了下面的这个例子

class test1: public ACE_Task<ACE_MT_SYNCH>
{
public:
test1(){}
virtual int open (void *args = 0);
virtual int svc (void);
ACE_thread_t threadID_;
};

int test1::open(void *args )
{
   int ret=this->activate (THR_SCOPE_SYSTEM|THR_JOINABLE);
   if(ret<0)
   {
      return -1;
    }
    return 0;
}

int test1::svc()
{
  threadID_=ACE_Thread::self();
  this->thr_mgr()->suspend(threadID_);
  return 0;
}

int ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
  test1 tt1;
  tt1.open();
  ACE_OS::sleep(1);
  int ret = tt1.thr_mgr()->testsuspend(tt1.threadID_);
  cout<<ret<<endl;
  return 0;
}

但是实际运行时到tt1.thr_mgr()->testsuspend(tt1.threadID_)这句程序就不在运行了,不知道是什么原因,初学ACE,还请大家指教
另外大家还有什么好方法实现上述功能也可以发帖讨论,谢谢
发表于 2009-9-17 08:56:47 | 显示全部楼层
把堆栈信息贴出来
 楼主| 发表于 2009-9-18 09:30:40 | 显示全部楼层
我用vc运行的,它“调用堆栈”那一栏是空的:(
发表于 2009-9-18 12:46:57 | 显示全部楼层
怎么会,用debug版,加载ACEd.pdb不会看不到的。
 楼主| 发表于 2009-9-18 13:26:50 | 显示全部楼层
多谢modern的关注

我在 int ret = tt1.thr_mgr()->testsuspend(tt1.threadID_);这句设置断点,堆栈信息我已截图(见附件),再往下程序将不在执行语句,一直处在等待的状态

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?用户注册

×
发表于 2009-9-18 13:31:57 | 显示全部楼层
跟进去呀,看到底阻塞在哪个函数的调用上。
 楼主| 发表于 2009-9-18 14:12:23 | 显示全部楼层
你是说“逐语句”调试吗?我试过了,无法跟进,一按就阻塞了
发表于 2009-9-18 16:12:09 | 显示全部楼层
PDB不在调试的目录或者不匹配,否则一定能跟踪进去的。
 楼主| 发表于 2009-9-21 11:06:05 | 显示全部楼层
谢谢winston的关注

vc90.pdb这个文件一直都在Debug文件夹下的,这个文件位置没有什么问题吧
发表于 2009-9-21 22:23:21 | 显示全部楼层
ACEd.pdb,你需要进入哪个组件,就需要那个组件的PDB。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 14:03 , Processed in 0.022276 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表