bao19830224 发表于 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,还请大家指教
另外大家还有什么好方法实现上述功能也可以发帖讨论,谢谢

modern 发表于 2009-9-17 08:56:47

把堆栈信息贴出来

bao19830224 发表于 2009-9-18 09:30:40

我用vc运行的,它“调用堆栈”那一栏是空的:(

modern 发表于 2009-9-18 12:46:57

怎么会,用debug版,加载ACEd.pdb不会看不到的。

bao19830224 发表于 2009-9-18 13:26:50

多谢modern的关注

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

modern 发表于 2009-9-18 13:31:57

跟进去呀,看到底阻塞在哪个函数的调用上。

bao19830224 发表于 2009-9-18 14:12:23

你是说“逐语句”调试吗?我试过了,无法跟进,一按就阻塞了

winston 发表于 2009-9-18 16:12:09

PDB不在调试的目录或者不匹配,否则一定能跟踪进去的。

bao19830224 发表于 2009-9-21 11:06:05

谢谢winston的关注

vc90.pdb这个文件一直都在Debug文件夹下的,这个文件位置没有什么问题吧

winston 发表于 2009-9-21 22:23:21

ACEd.pdb,你需要进入哪个组件,就需要那个组件的PDB。
页: [1] 2 3
查看完整版本: 线程挂起问题