委託可以認為就是乙個函式的入口.所以誰呼叫,占用誰的資源. 如下**:
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 方法就必須帶有乙個引數,該引...