2017-08-09 69 views
1

我想在我的服務器應用程序中實現一個機制,但我不確定哪個OTL抽象是最合適的。什麼抽象用於異步數據收集驅動程序

我的應用程序收集有關各種類型的equipements的數據。其中一些使用同步通信,從而在我的服務器應用程序中生成Delphi事件。 (推式) 其中一些使用異步通信,要求我的應用程序定期請求最新的可用數據。 (拉類似的)

因爲我希望我的服務器應用程序在儘可能頻繁地請求新的可用數據時保持響應,我希望將該「拉驅動程序」放在一個單獨的線程中,它將請求所有配置的數據點一個。

我想我的主線程產生這個OTL對象,然後在主線程中接收結果作爲delphi事件。這將仿效我的服務器主代碼已經制作的「類推」。 把它看作是你啓動的一個線程,它週期性地請求你想要監視的數據,並且只有當值發生變化時才發送給你一個事件。

您認爲哪種OTL抽象(高級別?低級別?)適合此行爲?

謝謝。

回答

1

我不確定OTL在這裏給你帶來多少好處,說實話。我寫了許多用於管理硬件設備的類,並且類模型幾乎總是一個普通的後代。 OTL非常適合分離任務和工作包,隊列,並行計算等。但是,在這種情況下,您不希望這樣做。你所需要的是一個模擬你的設備並封裝它可以執行的功能的類。

這將是一個單獨的工作線程,專門用於向設備中讀取和寫入數據。這將是一個長期存在的線程,只要封裝設備的類保持活動狀態,它就會持續存在 - TThread對此有意義。你的線程將是一個連續運行的簡單循環,輪詢所有需要的數據並刷新任何寫入請求。

該類還將用作設備參數的數據緩存,您需要某種同步設備(互斥鎖,關鍵部分等)來保護通過屬性對這些字段的讀寫操作。這些同步對象也以類字段的形式存在,並且您的線程和類模​​型共同存在於一個實體中。如果你想要事件通知,這些方便地包裝到同一個模型中。一個設備,一個線程,一個類。這對於TThread後代來說是一份完美的工作。

相關問題