线程挂起问题
我想实现这样一个功能:有两个线程,其中一个线程可能在运行时被挂起,想用另一个线程检测其状态。于是我写了下面的这个例子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,还请大家指教
另外大家还有什么好方法实现上述功能也可以发帖讨论,谢谢 把堆栈信息贴出来 我用vc运行的,它“调用堆栈”那一栏是空的:( 怎么会,用debug版,加载ACEd.pdb不会看不到的。 多谢modern的关注
我在 int ret = tt1.thr_mgr()->testsuspend(tt1.threadID_);这句设置断点,堆栈信息我已截图(见附件),再往下程序将不在执行语句,一直处在等待的状态 跟进去呀,看到底阻塞在哪个函数的调用上。 你是说“逐语句”调试吗?我试过了,无法跟进,一按就阻塞了 PDB不在调试的目录或者不匹配,否则一定能跟踪进去的。 谢谢winston的关注
vc90.pdb这个文件一直都在Debug文件夹下的,这个文件位置没有什么问题吧 ACEd.pdb,你需要进入哪个组件,就需要那个组件的PDB。