2012-04-09 97 views
0

我有一個現有的C++ win32控制檯應用程序。該應用程序包含一個主程序,可以實時連續處理來自硬件的一些數據,並具有一個服務器組件(線程化)將數據流式傳輸到客戶端。將GUI添加到C++ win32控制檯

我想如果有可能創建一個GUI,供用戶在運行此控制檯程序之前輸入一些程序參數。我打算僅顯示控制檯程序的狀態,例如GUI。運行,用戶單擊「開始」按鈕後不需要用戶交互。

任何建議,如果這是可能的?謝謝!

+0

是否有任何理由不考慮命令行參數? – yasouser 2012-04-09 01:37:22

+1

@yasouser我正在考慮給用戶一個GUI,這樣控制檯程序的輸入參數可以比請求用戶輸入一些錯誤輸入的命令行參數更清晰? – user990639 2012-04-09 02:03:34

回答

3

當然,只需創建一個window message loop的線程,就完成了。這可能需要一個單獨的線程來描述你所描述的內容,儘管你可以設想其他方式,具體取決於你現有代碼的確切細節。

反過來也是如此:一個GUI應用程序也可以創建一個控制檯並輸出給它。

1

快速和骯髒的方式 - 在任何你想要的工具包(例如Qt,Gtk,Windows API等)中創建GUI並使用標準system(const char *)函數。

Nmap是一個非常有意思的話題,因爲many front ends存在,因此您可能會對挖掘源代碼感興趣,以瞭解它們如何使控制檯應用程序成爲前端。

1

控制檯應用程序通常使用文本文件進行配置,以便它們可以在批處理腳本中運行而無需用戶交互。配置文件可以用參數指定。

一旦你有了這個,編寫GUI配置編輯器和啓動器就很簡單了。一個監視器程序可能最好做成一個通知區域圖標,當過程終止或控制檯輸出中出現某些東西時,它將會報告。

0

我在GUI上實現一個進程的方式(當我不幸沒有考慮包含GUI的設計時),就是使用posix線程進程,一個運行應用程序的代碼,一個用於GUI ,用父進程(父進程運行兩個子進程)的全局變量(hacky)以單向方式(以避免競爭條件出現),所以一個變量將寫入進程,讀取GUI以及另一個變量將讀取進程,寫入GUI。

我不得不重新編寫處理係數,使用繁忙的等待(壞)等待信息和狀態改變,以在每個繁忙的等待循環之間跳轉。繁忙的等待狀態變化並沒有太多實施。

這不是真正的最佳方式(這很不方便),而且GUI應該從開始就設計到代碼中,而不是稍後「粘貼」。但是這對我來說確實有效,而且在最後一分鐘的額外時間內,GUI的表現令人驚訝。