各位大大們,我碰到這樣一個問題:
我撰寫了一個PLC類,類中包含連接、讀和寫3個函式,這3個函式都呼叫了dll,我看網上講delphi呼叫COM時,要先Coinitialize(nil),進行初始化,并和Couninitialize配對使用。
我創建了2個執行緒,一個主執行緒,一個操作執行緒,主執行緒運行開始,我先Coinitialize(nil),呼叫類方法中連接函式,連接好后,然后回圈呼叫類方法中的讀函式,能夠回圈讀到PLC中的資料,然后我單擊按鈕創建操作執行緒,操作執行緒中首先進行Coinitialize(nil),然后再次呼叫讀函式,此時主執行緒中的讀函式依然在運行,此時能讀到操作執行緒給出的PLC資料,并釋放Couninitialize,回傳主執行緒后程式讀函式就會報錯,提示Interface not supported。
我想問,不同的執行緒呼叫Coinitialize(nil)對com進行初始化后,再呼叫同樣的一個讀函式,會出現這種錯誤情況嗎?
后來,我在類中這樣做:將連接和讀函式做成一個函式,并在函式開始就呼叫Coinitialize(nil),連接好后,讀取資料,然后釋放Couninitialize,依舊是一個主執行緒和一個操作執行緒,這時候2個執行緒都呼叫這個函式,居然不會出現這種錯誤了,但是我不想每次讀取資料的時候都要連接一次,這樣會很耗時間,有沒有高手解決下小弟的問題?
uj5u.com熱心網友回復:
Coinitialize(nil)和Couninitialize都只要在應用中執行一次就行了。uj5u.com熱心網友回復:
只需在主執行緒式執行就可。uj5u.com熱心網友回復:
最好只呼叫一次,釋放一次uj5u.com熱心網友回復:
只要你控制好,呼叫多少次又有什么關系,每次呼叫COM介面函式時,先try Coinitialize(nil),最后finallyCouninitialize;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/157018.html
標籤:網絡通信/分布式開發
