2012-11-16 50 views
1

我很好奇如何處理這個問題;我目前有一個DataSnap服務器設置和一個管理認證的TDSAuthenticationManager類。Delphi(DataSnap)我需要線程身份驗證嗎?

如果身份驗證失敗,我直接寫入表單TMemo或類似的東西以用於日誌記錄目的是否安全?觀察這個最好的方法是什麼?

我需要穿線嗎?

乾杯閱讀, 阿德里安

回答

3

是的,你需要同步的,因爲事件的DataSnap在不同的線程的上下文中運行,並且你可能知道,在UI的設計僅限於主線程。

所以,如果你想在用戶界面中顯示一些東西,你必須照顧如何去做。另一方面,如果你想日誌到一個文件,你不需要同步,但你必須小心,因爲有可能兩個不同的線程同時嘗試登錄。

我將評估這些選項是:

  • 使用臨界區保護的訪問日誌文件,從而避免與鎖的多線程訪問。一次只有一個線程可以訪問該文件,而其他感興趣的線程必須等待。
  • 創建一個新的日誌記錄類,通過簡單地將日誌消息添加到內存中的一個(具有多線程功能的)隊列並運行它自己的線程將它們寫入文件時,可以從中獲取日誌請求日誌請求的全局實例是隊列中的消息。

由於服務器傾向於在生產環境中作爲服務運行,因此我會選擇後者。

+1

...或使用Delphi的許多日誌記錄庫之一,如[Log4D](http://mikejustin.wordpress.com/2012/09/12/delphi-and-free-pascal-logging-with- (-file4d-open-source-library /),它有各種輸出選項(文件,ODS,SMTP,UDP,...) – mjn