2011-07-05 57 views
0

問題大多是OOP設計問題。 我有一個類處理與硬件的連接和通信(假設通過USB) - CommClass。它有幾種方法 - connect(),disconnect(),read(),write()。 應用程序本身有很少其他類想要通過CommClass與同一硬件進行通信。 問題 - 你通常如何做到這一點? 我心裏有一些想法:C++應用程序和硬件通信

  1. 在父類或在CommClass主要創建實例,調用connect()和PAS一個指向所有類(構造函數)。最後 - disconnect()
  2. 每個類的每個方法將在需要時在堆棧中創建一個CommClass對象。 - 這裏的問題是,它必須調用connect()方法,以請求的句柄,USB等等,每次...
  3. 使用來自CommClass靜態方法...
+0

你解答了你自己的問題。有幾個模塊共享一些CommClass,而不是在它們之間共享一個普通變量,沒有什麼不同。最好的方法可能會將其作爲指向所有使用它的模塊的指針。 – Lundin

+0

正如你所提到的倫丁你已經回答。如果您對答案不滿意,請在此處分享您的問題陳述,並同時再次訪問問題。找出缺少的東西。類diagaram或設計總是基於問題陳述。如果問題陳述不清楚,那麼沒有人可以給出好的設計。 – Kamahire

回答

0

如果您希望有一個單一的連接到設備(假設一個USB設備),那麼如果你想有一個更優雅的設計,並使用由你的CommClass實現的接口來工作,那麼有一個單一的實例CommClassICommClass是有意義的。您也可以將連接(類或接口)包裝到singleton中,這樣您就可以確保連接僅進行一次。如果您希望在單個線程應用程序中一次使用單個連接,則此功能效果最佳。在多線程或多連接環境中,您可以嘗試使用object pool設計模式。

+0

感謝您的鏈接。這就是我一直在尋找的 - 一些設計模式。現在我必須選擇合適的工作。 – nchokoev

0

我認爲最好的解決方案很大程度上取決於您的應用程序的要求和通信連接的性質。在最簡單的情況下,你在(1)中描述的內容可能就足夠了。

就我個人而言,我幾乎總是把通信放到一個單獨的線程中。這有點複雜,但它可以帶來顯着的速度優勢,並確保您的用戶界面在通信發生異常時不會無響應(如USB電纜被拔出)

我最常使用的設計(RS232通信)對您在(1)中描述的內容略有差異。我有一個CComms類作爲我的主應用程序對象的成員,它創建了一個線程來運行通信。然後我有一個非常簡單的消息系統,類似於Windows使用的一個處理所有線程同步在通信線程之間傳遞數據的消息系統和主要應用程序。主應用程序然後有幾個簡單的功能來發送來自其他類的通信消息並將響應發送回相關的類。

我希望有一點幫助...

+0

我是這樣開始的。該線程有點複雜的解決方案,但我喜歡它。我可能會再試一次。如何處理硬件響應延遲並且用戶不斷請求的情況(點擊示例中的read()按鈕)。這會產生很多事件... – nchokoev

+0

我在處理消息隊列之前先檢查消息隊列,然後再添加新消息。如果隊列中已經有相同ID /類型的消息,我就放棄它。延遲的硬件響應正好是使用單獨的線程進行通信的情況,這是一個好主意 - 沒有它,用戶將無法多次單擊該按鈕,因爲UI將被鎖定。我同意這是一個更復雜的解決方案,但我認爲從長遠來看這是值得的。 – Redeye

相關問題