peakzhang 发表于 2007-12-11 22:05:37

创建了挂起状态的线程没有resume就自动执行,请大家解惑

main函数里创建了一个挂起状态的线程,代码如下:int create_result = conn_handler.activate(
                              THR_NEW_LWP | THR_JOINABLE | THR_SUSPENDED,
                              1,1,
                              ACE_THR_PRI_OTHER_DEF);
      ACE_ASSERT(create_result == 0);
      ACE_TRY_CHECK
测试时故意没有调用resume,可程序运行时这个线程时常也会执行。
(我在svc函数里加了输出信息,可以观察这个线程是否会执行)
初学ACE不久,请前辈们解惑。
系统:Red Hat Enterprise Linux ES release 3
在google的新闻组论坛上得知:
THR_SUSPENDED 标志不是所有平台上都支持的,特别象linux这类实现POSIX的Pthread module的平台
那现在的问题是,这个特性我用不了(目标平台就是linux redhat),还有什么好的方法
能实现让一个线程先run起来,然后别的再run呢。也就是让多个线程按顺序启动,而不是
按一定顺序执行(这个是用同步机制来实现)。
我已经被困扰好几天了,还希望各位能路过看看,给些建议和提示,谢谢

peakzhang 发表于 2007-12-11 22:05:54

查看ACE里面,关于线程安全和同步的内容。
ACE_Barrier是否可以做到呢?一起启动、一起退出。
或者用ACE_Event,一个线程启动后,触发事件,而另外一个线程等待这个事件有信号,才进行操作。
问题解决了,放弃了原来使用ACE_Task_Base派生类的activate()激活

线程的方法,直接用ACE_Thread_Manager创建,先保证所有的线程都可以running。

我刚接触ACE不久,看着Event感觉有点复杂,就先用ACE_Condition来实现按序执行。
页: [1]
查看完整版本: 创建了挂起状态的线程没有resume就自动执行,请大家解惑