c – 如何保证win32应用快速关机?
发布时间:2020-12-16 04:54:40 所属栏目:百科 来源:网络整理
导读:我有一个C Win32应用程序,当用户想要关闭应用程序时,它有许多线程可能正忙于执行IO(HTTP调用等).目前,我很好地玩,并等待所有线程结束,然后从main返回.有时,这比我想要的时间更长,事实上,当我可以退出时,让用户等待似乎毫无意义.但是,如果我继续从main返回,我
我有一个C Win32应用程序,当用户想要关闭应用程序时,它有许多线程可能正忙于执行IO(HTTP调用等).目前,我很好地玩,并等待所有线程结束,然后从main返回.有时,这比我想要的时间更长,事实上,当我可以退出时,让用户等待似乎毫无意义.但是,如果我继续从main返回,我可能会因为析构函数开始被调用而崩溃,而仍有线程使用对象.
因此,认识到在一个理想的,柏拉图式的美德世界中,最好的办法是等待所有线程退出然后干净地关闭,下一个最好的真实解决方案是什么?简单地让线程退出更快可能不是一种选择.目标是尽可能快地使进程失效,例如,可以在其上安装新版本.我正在做的唯一磁盘IO是在一个事务数据库中,所以我并不十分担心拔掉插件. 解决方法
使用重叠IO,这样您就可以始终控制处理I / O的线程,并且可以随时停止它们;你让它们等待IOCP并且可以向它发布应用程序级别的关闭代码,或者你可以在OVERLAPPED结构中等待事件并等待你的’所有线程请立即关闭’事件.
总之,请避免阻止您无法取消的呼叫. 如果你不能和你陷入阻塞套接字调用做IO那么你总是可以从线程中关闭套接字,该线程决定是时候关闭并让正在做IO的线程总是检查’关机现在’重试前的事件…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- Ajax概述和判断用户名是否存在的简单代码练习
- iphone – 为什么我的文件不进入“en.lproj”而是
- 投掷析构函数可由C 98和C 1x编译.有没有更好的办
- 四种操作xml的方式: SAX, DOM, JDOM , DOM4J的比
- flash/flex builder在IE中stage.stageWidth始终为
- oracle – 使用PL / SQL生成XLS文件
- postgresql事务级别可重复读取和序列化是否相同?
- ruby-on-rails – 我应该在Heroku上使用prema_ap
- 在Ruby中覆盖attr_ *方法
- LinQ实战学习笔记(一) LINQ to (Objects, XML, S
热点阅读