WinCE系统拔出SD卡以后,在上面运行的程序并读取上面的文件就会失去响应,而且无法关闭(TerminateProcess无法关闭)。
怎样修改程序才能避免(在拔卡时)出现无法关闭的情况。
你可以通过开发工具中自带的进程管理器来关闭不响应的程序,它的功能和XP下的任务管理器的功能一样;如果你的开发工具为EVC+SP4,那么你可以使用“工具”菜单下的Remote Process Viewer子项来关闭不响应的程序…通过程序修改不太清楚,学习一下+友情帮顶…
引用: 引用 4 楼 yashi 的回复:
对文件的读操作,做一些修改。
这样最简单
插入 卡 以后 程序在上面运行, 而且(读写)卡 上面的文件。
在此过程中拔掉 卡, 程序就会失去响应。 用 进程管理器 也无法关闭。
不只是我写的程序, 好多软件都是这样。
比方说: 一些知名的导航软件。
有些时候,如果在读写卡上文件的时候 拔卡。CE系统也会down 机。
我不知道为什么会这样。
是不是sd驱动的错误。
如果是sd驱动的错误, 原因是什么?
应该不是SD驱动的错误,感觉就是你应用的问题。
帮顶下。我也学习下。
是不能关闭,这个要从程序本身入手
在程序检测到SD卡拔出时,自己关闭. 现下PND上的导航软件,大都具有这具功能.
在SD协议栈里面,不是SD主控制驱动所做的事情,,,这部分在客户端驱动与总线驱动里面去处理,,,所以,LZ出现这个现象,并不代表问题就在这个地方的
“现在PND上的导航软件,大都具有这个功能.”
有谁研究过这个功能是怎样做的吗?
系统在装载exe与dll的时候,是通过内存映射的方式来把exe/dll内容映射到内存。
在装载的时候,可以用pe section的标志位来控制:
是把exe/dll的内容复制到物理内存,
或者不全部复制,用到的时候再从文件来访问。
现在遇到的情况是:
如果,
修改pe section的标志位,使得在装载的时候,把exe/dll的内容复制到物理内存,
程序就能正常退出。
不过,
占用的物理内存比较多。
除了这样做(修改pe section),还有没有其它办法?
欢迎各路高手提供帮助!
无尽感谢!
严格地讲:
“程序就能正常退出。”
是不对的。
我说的意思是:程序至少能够被kill掉,
而不至于变成连TerminateProcess也消除不了的zombie进程。
我的想法是:拔卡以后再去调用读写文件(文件在卡上)的函数是没有意义的。
所以需要设置一个全局的标志位,拔卡以后进行设置。
所有读写文件的函数,在调用之前,要检查拔卡标志位。
如果已经拔卡,就不再读写。
然而, exe/dll是从文件映射到内存的,
(如果装载的时候,没有复制到物理内存,)
拔卡以后,系统很可能会做上述没有意义的事情:
尝试从卡上“读取”exe/dll文件。
这种情况下,会出现什么结果呢?