抓狂的Namespace Shell Extension (3)

Explorer有两种线程模型:
 
(1) 所有窗口在一个进程内,每窗口是一个或多个GUI线程。
(2) 每窗口一个进程,每进程中有一个或多个GUI线程。
 
比较好的情况(对程序员友好)是(2)。如果用户选择的是方式1,那么在编写namespace shell extension时如果需要non-blocking方式,即完成长时间工作而主窗口依然能处理用户消息,一定要千万分当心。
 
下面是典型的一种情况:
 
在RarFS/0.0.7中增加了在临时路径打开文件,然后监测其变化的功能。很显然,这件事一定不能妨碍用户的正常操作,即必须是non-blocking的。
 
最初的选择是建立第二消息循环。后来发现,Explorer居然在每次QueryInterface(IShellFolder)的时候都会创建一个新线程,同时将老线程关闭。这样,在老线程中创建的窗口也就随之实效。
 
目前的处理方式是建立一个singleton的监测线程,方法就是创建线程后创建一个窗口,窗口在WM_TIMER中处理所有监测改变的任务。凡是要添加新文件到监测列表时,通过SendMessage将文件名等等信息传递过去。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值