例如,我們有一個TextEditor應用程序。像記事本++。我們有標籤顯示哪些文件內容。
OS中的默認文本編輯器設置爲TextEditor應用程序。當我們打開一個新的文件應用程序時,添加了一個標籤並將內容添加到它。
如何讓應用程序在Qt中打開一個新文件時不運行新實例?
你認爲哪種方法最好?如何使應用程序在Qt中打開一個新文件時不運行新實例?
1
A
回答
0
問題是如何製作單實例應用程序。當您打開文件時,操作系統將打開關聯的應用程序,並將其作爲命令行參數提供給該文件。您不能簡單地通過操作系統機制將「打開文件」命令委託給正在運行的應用程序,您必須自行實施。
在AppWhirr項目中,我們使用QLocalServer/Client在實例之間進行通信:當AppWhirr應用程序執行時,它檢查是否已經使用了帶有修復ID的QLocalServer。如果不是這個應用程序的實例是第一個/唯一運行的實例。如果ID已被使用它意味着應用程序的另一個實例已經在運行,所以這第二個實例只會做兩件事情:通過Qt的本地客戶機/服務器通信發送給定的輸入參數的其他實例,當它成功地完成了通信它會退出(二審)。
這對問題的一個解決方案,需要相當多的編碼,我不會推薦它,如果你不希望使用其他的事本地客戶端/服務器通信,但它是一個可行的解決方案。
另一種解決方案是,應用程序的第一個實例在固定位置創建一個文本文件並寫入我們的實例ID。之後,第二個實例可以讀取文本文件並將消息發送到指定的ID。當然,第一個實例必須在退出時刪除文本文件,並且可能必須在第一個實例崩潰的情況下實施一些故障安全代碼來刪除文本文件。此解決方案將使用比第一個更少的資源,但需要故障安全清理代碼。
或者你可以使用第三方解決方案,如@Matteo意大利第三個選擇建議。
相關問題
- 1. 如果一個實例已經運行,重新打開一個Qt桌面應用程序
- 2. 如何在不打開應用程序的新實例的情況下在運行應用程序中打開新文檔?
- 3. 在同一應用程序實例中打開兩個文件
- 4. 如何重新打開java應用程序launch4j單個實例
- 5. 如何防止在多次運行Java程序時打開MATLAB的新實例
- 6. 運行.bat文件不斷打開CMD的新實例?
- 7. VB.Net WPF單實例應用程序,第一個新實例打開窗口
- 8. 在Windows中運行應用程序的實例中打開文件(C++)
- 9. 如何從另一個qt應用程序運行一個qt應用程序
- 10. 如何在Qt應用程序中打開文件?
- 11. 如何打開相同的應用程序,而無需打開新的實例,當應用程序在後臺
- 12. 應用按鈕打開另一個應用程序的當前/新實例
- 13. 如何在應用程序的同一實例中打開關聯的文件
- 14. 從一個實例運行另一個應用程序實例。
- 15. QT:如何打開一個新窗口
- 16. 用一個新的實例代替正在運行的程序
- 17. 如何使程序在打開文件夾時運行?
- 18. 在一個新窗口中打開一個Chrome應用程序
- 19. 如何在每次使用Java運行程序時創建一個新文件
- 20. 如何打開我的應用程序只是一個實例
- 21. 如何在啓動時在Cocoa應用程序中打開一個新窗口
- 22. 如何在重新打開應用程序時檢查前一個會話的線程是否仍在運行?
- 23. 如何在kivy應用程序中同時運行Clock.schedule_interval實例?
- 24. 如何在Linux中打開一個程序的多個實例
- 25. 使用每個文件打開Excel 2010的新實例
- 26. Python - 在應用程序實例打開時執行命令
- 27. C#阻止應用程序打開新實例?
- 28. 如何打開在另一個應用程序中打開的文件
- 29. 如何打開其他文件到一個已經運行的應用程序
- 30. 如何在Ruby中使用其實例變量重新打開一個類?
看一看http://stackoverflow.com/questions/5006547/qt-best-practice-for-a-single-instance-app-protection。 – 2012-08-11 13:44:42
感謝您的回覆! – 2012-08-11 19:03:20