抓狂的Namespace Shell Extension (3)

博客介绍了Explorer的两种线程模型,指出方式(2)对程序员更友好。在编写namespace shell extension采用non - blocking方式时需谨慎。以RarFS/0.0.7为例,最初选择建立第二消息循环,后因Explorer特性失效,目前采用建立singleton监测线程,在WM_TIMER中处理监测任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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将文件名等等信息传递过去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值