呼叫委託後,資源占用哪個執行緒的

2021-04-13 23:20:35 字數 1041 閱讀 6697

委託可以認為就是乙個函式的入口.所以誰呼叫,占用誰的資源. 如下**:

delegate void dlgtfunc1(int ivalue);

void

func1(

intivalue)

private

void

button1_click(

object

sender, eventargs e)

輸出如下:

11/15/2007 8:39:12 pm----func1 :0

11/15/2007 8:39:13 pm----func1 :1

結果肯定是順序的,而且相差1s. 因為呼叫函式就是這樣的:)

再來看乙個例子.

我們開啟乙個執行緒,用於重新整理乙個介面上的button.最後退出時,用標誌變數等待退出執行緒.感覺沒有任何問題:)

void

func0()

delegate

void

dlgtfunc();

void

threadone()

system.diagnostics.debug.writeline(

"thread one end");

m_bthreadha***it 

=true;}

private

void

form1_formclosing(

object

sender, formclosingeventargs e)}

private void button2_click(object sender, eventargs e)

但是,實際執行會發現:很容易退不出程式

資源互相搶占,死鎖!

這裡,特殊之外就在:this

.invoke(

newdlgtfunc(func0));

看幫助可以發現,這個其實是在 主線程 中執行的.當你退出時,closing 事件中當然也是在主線程中了.因此,這兩處同乙個都在同乙個執行緒中執行,發生問題,也正常:)

執行緒 委託的非同步呼叫

c programming p323 begininvoke 會立即返回,它將建立乙個另乙個執行緒來完成自己的工作。當我需要它執行後的結果時 例如 pubilc delegate in testdetegate pubilc testdetegate thedetegate thedetegate ...

程序與執行緒所占用的資源

1 位址空間 2 全域性變數 3 開啟的檔案 4 子程序 5 訊號量 6 賬戶資訊 1 棧 2 暫存器 3 狀態 4 程式計數器 1 段code segment 2 資料段data section 3 程序開啟的檔案描述符 4 訊號的處理器 5 程序的當前目錄和 6 程序使用者id和程序組id 1 ...

委託的呼叫方法與執行執行緒

委託在c 中可以看作是物件的一種新型別。一般情況下,我們經常把資料作為引數傳遞給某個方法,但有時某個方法執行的操作並不是指對資料進行操作,而是要對另乙個方法進行操作,這就需要使用委託了。委託典型的使用場合就是執行緒。當試圖啟動乙個執行緒時,使用的thread.start 方法就必須帶有乙個引數,該引...