馬上註冊  |  找回密碼

SAY討論區

查看: 277|回復: 21
打印 上一主題 下一主題

如果兩個程序都這樣做會怎樣? - 程式設計 [複製鏈接]

好友
0
帖子
130227
積分
136402
最後登錄
2019-2-28
在線時間
0 小時
跳轉到指定樓層
樓主
發表於 2013-11-6 01:27:57 |只看該作者 |正序瀏覽
在腦子裡「設想如果可以這樣」,這種方法能幫助你理解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? ]
分享分享0 收藏收藏0 讚好讚好0 Unlike!Unlike!0 分享 傳送 邀請

好友
0
帖子
125481
積分
125488
最後登錄
2019-2-28
在線時間
0 小時
22#
發表於 2013-11-14 09:49:56 |只看該作者
謝謝樓主啊!

好友
0
帖子
125053
積分
125072
最後登錄
2019-2-28
在線時間
0 小時
21#
發表於 2013-11-14 00:45:46 |只看該作者
我等你喲

好友
0
帖子
124727
積分
124735
最後登錄
2019-2-28
在線時間
0 小時
20#
發表於 2013-11-13 12:35:14 |只看該作者
這個站不錯!!  

好友
0
帖子
125023
積分
125030
最後登錄
2019-2-28
在線時間
0 小時
19#
發表於 2013-11-13 00:42:50 |只看該作者
讀10年書,不然看樓主一篇帖子

好友
0
帖子
124836
積分
124843
最後登錄
2019-2-28
在線時間
0 小時
18#
發表於 2013-11-12 11:16:18 |只看該作者
感謝樓主

好友
0
帖子
124843
積分
124850
最後登錄
2019-2-28
在線時間
0 小時
17#
發表於 2013-11-10 04:08:07 |只看該作者
認真回覆,賺取潛水值

好友
0
帖子
117185
積分
136543
最後登錄
2019-2-28
在線時間
0 小時
16#
發表於 2013-11-9 09:47:06 |只看該作者
經過你的指點 我還是沒找到在哪 ~~~

好友
0
帖子
125011
積分
125066
最後登錄
2019-2-28
在線時間
0 小時
15#
發表於 2013-11-8 11:17:03 |只看該作者
加油啊!!!!頂哦!!!!!支持樓主,支持你~

好友
0
帖子
130012
積分
135426
最後登錄
2019-2-28
在線時間
0 小時
14#
發表於 2013-11-7 07:00:55 |只看該作者
真的有麼
您需要登錄後才可以回帖 登錄 | 馬上註冊 |

Archiver|手機版|SAY討論區

GMT+8, 2026-7-4 00:35 , Processed in 0.676691 second(s), 8 queries .

Powered by go2tutor.comDiscuz! X2

© 2026 Community Networks Limited

回頂部