Re: [cpp] 有关 STA 的疑问

sunpluto sunpluto2004 at yahoo.com.cn
Sun Mar 18 20:43:35 CST 2007


      我是在主界面线程中调用 shell 的 IEnumIDList 接口的 Next 操作,在 Next 调用时,Next 函数会阻塞,而我的主界面线程是用 OleInitialize 初始化的,因此主界面线程中创建了一个 主STA。
        在 Next 函数阻塞的过程中,程序好像隐含了一个消息循环处理,因此即使在阻塞的过程中,程序仍然能够响应消息,从而能够将主界面窗口关闭。
        但在主界面窗口被关闭后,Next 调用就悬挂起来了,永远不能返回(仿佛调用进入了一个死循环),导致整个程序无法正常退出。
        我尝试了一下自定义 IMessageFilter 接口,但还是无法解决这个问题。
   
  不知道以上的解释是否够清楚了,还请各位大虾指点一下。

qiaojie <qiaojie at gmail.com> 写道:
    语焉不详,无从回答。
  COM对象在哪个线程创建的?在哪个线程被调用的?哪个线程阻塞了?

 
  On 3/15/07, sunpluto <sunpluto2004 at yahoo.com.cn> wrote:     各位大虾:
   
  最近我写了个测试程序,用到 IEnumIDList 的 Next 操作枚举目录中的元素,但 IEnumIDList 是一个 COM 接口,而在我的主程序工作于 COM 的 STA 模式时,Next 操作的过程会阻塞,在阻塞的过程中会进行窗口消息的派发(STA 模式有内含一个隐藏的消息处理循环),若此时我关闭了主窗口,则窗口是不见了,但整个程序便挂起了(在隐含的消息处理循环中派发了 WM_DESTROY 消息,但是却无法从 Next 函数的访问中返回,程序就这样挂起了)。 
   
  我查到使用自定义的 IMessageFilter 可能可以解决这个问题,但我实现后却发现问题照旧。
   
  我在网上找了很久,都没找到答案,讨论组中的大虾们,能解答一下么???
   
  先谢拉。


致
礼     
---------------------------------
  Mp3疯狂搜-新歌热歌高速下   

_______________________________________________
Cpp mailing list
Cpp at codingnow.com
http://codingnow.com/mailman/listinfo/cpp

  


_______________________________________________
Cpp mailing list
Cpp at codingnow.com
http://codingnow.com/mailman/listinfo/cpp



致
礼
 		
---------------------------------
抢注雅虎免费邮箱-3.5G容量,20M附件! 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://codingnow.com/pipermail/cpp/attachments/20070318/b6bbb836/attachment.html


More information about the Cpp mailing list