当前位置:编程学习 > wap >>

Qt windows上检测移动硬盘或U盘挂载的问题

我自己写了个文件管理器,代码中可以通过接受并处理WM_DEVICECHANGE事件来判断是否有设备安装或卸载,但是设备安装或卸载的时候,WM_DEVICECHANGE事件会同时产生很多个,我的文件管理器刷新是通过处理WM_DEVICECHANGE事件时创建新的QFileSystemModel来实现,因为QFileSystemModel不会自动加载新的盘符,但是现在的问题是多个WM_DEVICECHANGE事件的产生会导致我的程序出现异常并退出,请问有没有同学有好的解决办法(win7上一般不会产生异常,但是XP经常会) --------------------编程问答-------------------- 怎么没人回一下? --------------------编程问答-------------------- WM_DEVICECHANGE产生多个的话,那你也只要关心的是需要的事件啊,比如你在监听到插入的时候做处理DBT_DEVICEARRIVAL,在移除的时候也做处理DBT_DEVICEREMOVECOMPLETE,不能只接收到WM_DEVICECHANGE就直接处理,得判断下当前是什么类型的change事件
--------------------编程问答-------------------- WM_DEVICECHANGE产生多个的话,那你也只要关心的是需要的事件啊,比如你在监听到插入的时候做处理DBT_DEVICEARRIVAL,在移除的时候也做处理DBT_DEVICEREMOVECOMPLETE,不能只接收到WM_DEVICECHANGE就直接处理,得判断下当前是什么类型的change事件
--------------------编程问答-------------------- 我的意思是同样类型的事件同时产生了多个,比如设备安装,一下子产生了5个事件,值都是一样的 --------------------编程问答-------------------- 我在代码里做了延时处理,比如接收到同样的事件,延时500ms,如果500ms内收到相同的事件,定时器重置,重新计时,直到不再收到为止,但是这样做只是让程序出现异常的概率小了些,在Xp上还是偶尔会出现异常并退出 --------------------编程问答-------------------- 那我不明白了,检测到拔出的时候,肯定是去执行你的函数了,为什么你的函数执行多次就会崩呢?还是你代码的问题吧。先跟踪到多次调用时崩在哪儿了,然后贴出来大家看看 --------------------编程问答-------------------- 我是先delete 以前 new的QFileSystemModel,然后创建新的QFileSystemModel,再调用setModel,结果就会出现异常 --------------------编程问答-------------------- setModel是treeview的函数吧,你最好在setmodel前把tree里的东西都clean掉,然后在更新tree。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,