免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1595 | 回复: 2
打印 上一主题 下一主题

如果两个程序都这样做会怎样? [复制链接]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:28
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-06 09:24 |只看该作者 |倒序浏览


本文作者介绍

Raymond Chen

Raymond Chen是微软Windows Shell开发团队中的知名程序员,从1992年加入微软开始,他参与过OS/2,Windows 95,DirectX已经以后版本的Windows的开发。他的关于Windows的发展以及Win32编程个人博客“The Old New Thing”是微软MSDN上最著名的个人博客之一。著有同名书籍《The Old New Thing》,中文译名为《Windows编程启示录》。Raymond还为Microsoft TechNet撰写专栏文章。

在脑子里“设想如果可以这样”,这种方法能帮助你理解Windows是否会允许让你做这种或那种事情。如果这种设想会明显的导致一种自相矛盾的情况,或跟人们已经接受的原则体系相冲突,那你可以明确的得出Windows不会支持这种行为的结论。(当然,如果没有明显的矛盾或冲突,也不能证明Windows就一定会支持这种操作。但用这种方法你可以排除一些明显的不正确的想法。)

问“如果两个程序都这样做会怎样?”也是一种非常有用的甄别一个功能特征或设计想法是否合理的好方法。配合“设想如果可以这样”,它们能成为一个漂亮的组合拳。下面是几个例子:
“我怎么才能创建一个窗口,让它永远不会被其它窗口覆盖,即使那些最上层的窗口也不行?”

假设这样如果是可以的,加上如果有两个程序都这样做。程序A创建了一个“最上层”的窗口,程序B也这样做了。现在用户拖动这两个窗口,让它们重叠,会发生什么?你给自己创造了一个逻辑冲突。这两个窗口必须有一个在上,一个在下,推翻了假想的“超级最上层”设计想法。

“如何突出我的进程,让它成为在系统关机时第一个/最后一个接到通知?我想在系统关机时在所有其它程序退出之前/之后做一些事情。”

假设如果这样可能,假设两个程序都这样做。你现在有了两个程序都希望做第一/最后。但你不可能有两个第一或两个最后。其中有一个必须要放弃。(这个可以推广到其他的人们想要第一或最后的事情上。)

“如何能保证当用户双击.XYZ文件时总是我的关联程序会启动运行?”

假设这是可能的,假设两个程序都想这样。当用户点击.XYZ文件时,哪个程序运行?

这种情况下的一种解决方案是用户来选择文件的关联程序;但一旦用户决定让另外一个程序来执行.XYZ文件,那你不得不接受这样的事实。

对于很多这种“我想成为这最X”类型的问题,程序员通常会想出一些伎俩,比如运行一个定时器周期性的检查自己是否仍是最X,如果不是,就重新把它推到X位。不久,你就会开始停下来思考,“如果两个程序都这样做会怎样?”,于是认识到这是一个糟糕的想法。

就算是我这样解释了,很多人仍然不得要领。我让他们去想想“如果两个程序都这样做会怎样?它们会打架,”而我得到的回复是,“我可以让第二个程序检查第一个程序是否在运行。”他们不明白第二个程序不是他们写的。

当出现两个程序这样“互殴”时,我们无法预料哪一个会赢,但我们可以确定的、100%的预料的谁会输:用户。

我还清楚的记得有一回同事让我看有两个非常流利的商业软件都想成为当用户点击.XYZ文档时被调用的程序。因为这是没法保证的,于是软件里就提供了定时检查的程序试图解决这个问题。

你安装了第一个程序,它把自己设置成.XYZ文件的关联程序,这看起来很正常。然后你安装了第二个程序,它也把自己设置成.XYZ文件的关联程序,这样第一个程序就跳出来说,“不,.XYZ应该是由我来处理的”,并且把文件关联改了回去。而第二个程序也说,“没门,我才是处理.XYZ文件的程序”,并且把自己重置回去。

这种小孩斗气式的游戏进行的时候,用户只能无助的坐在那里发愣的看着.XYZ文件的图标在两个程序间换来换去。这两个程序都坚持认为让自己来处理.XYZ文件是在为用户着想。

[英文原文:What if two programs did this?]

转自 http://www.aqee.net/what-if-two-programs-did-this/

本文来自ChinaUnix新闻频道,如果查看原文请点:http://news.chinaunix.net/opensource/2013/1106/3002766.shtml

论坛徽章:
0
2 [报告]
发表于 2013-12-04 19:55 |只看该作者
国际惯例,顶下哈~~~~~

论坛徽章:
33
ChinaUnix元老
日期:2018-07-04 15:10:362015年亚洲杯之阿联酋
日期:2015-02-06 17:15:532015亚冠之武里南联
日期:2015-06-06 15:40:252015亚冠之北京国安
日期:2015-06-17 15:42:412022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:322015亚冠之阿尔纳斯尔
日期:2015-09-20 09:42:1215-16赛季CBA联赛之北京
日期:2016-01-15 10:03:5915-16赛季CBA联赛之青岛
日期:2016-04-26 16:44:4915-16赛季CBA联赛之广夏
日期:2018-07-04 15:33:21C
日期:2016-10-25 16:12:142017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之同曦
日期:2017-02-22 22:41:10
3 [报告]
发表于 2013-12-05 08:35 |只看该作者
                              
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP