2017-07-28 31 views
1

我正在使用Indy 10(來自Delphi 2009)構建TCP服務器。在OnExecute事件中,我需要訪問主線程中的一些數據。當我啓動它時,可以將這些數據傳遞給服務器線程?該服務器啓動IdTCPServer1.Active:=True;,所以我不明白我怎麼可以傳遞一些參數。如何使用參數啓動Indy TCP Server?

+0

如果數據發生變化並且您想創建一個*快照*,請複製它們及其參考通道,例如,通過自定義的'TIdServerContext'類。 – Victoria

+0

我在Delphi 2009中沒有那個類。我搜索了它。 –

+0

單位[IdCustomTCPServer](https://github.com/graemeg/indy/blob/master/Lib/Core/IdCustomTCPServer.pas#L307)。但它可能沒有必要。你想傳遞給執行線程的數據是什麼?什麼是數據類型?它們在服務器運行時更​​改嗎? – Victoria

回答

3

不可能將額外的參數傳遞給TIdTCPServer。您的服務器事件處理程序必須在需要時從主線程檢索數據。

要跟蹤每個事件的連接數據,可以使用TIdContext.Data屬性,或從TIdServerContext派生自定義類並將其分配給TIdTCPServer.ContextClass屬性。例如,您的OnConnect事件處理程序可以使用TIdSyncTThread.Synchronize()從主線程檢索最新數據,然後將其緩存在上下文中供OnExecute使用。