執行緒 ManualResetEvent 類

2021-07-30 11:48:00 字數 2257 閱讀 9962

reset(): 當乙個執行緒開始乙個活動(此活動必須完成後,其他執行緒才能開始)時, 它呼叫 reset 以將 manualresetevent 置於非終止狀態。此執行緒可被視為控制 manualresetevent。

為了把狀態修改為無訊號的,必須呼叫reset()方法。

waitone(): 呼叫manualresetevent 上的 waitone 的執行緒將阻止,並等待訊號。    

set ()當控制線程完成活動時,它呼叫 set 以發出等待執行緒可以繼續進行的訊號。並釋放所有等待執行緒。set將事件狀態設定為終止狀態,允許乙個或多個等待執行緒繼續。

為了把狀態修改為有訊號的,必須呼叫set()方法。

manualresetevent物件只能擁有兩種狀態之一:有訊號(true)或無訊號(false)。manualresetevent類繼承於waithandle類,其建構函式的引數可確定物件的初始狀態。

set()和reset()方法返回乙個布林值,表示是否進行了成功的修改。

上面的例子中,構造了false值的manualresetevent物件,布林值false把manualresetevent物件的初始狀態設定為無訊號。接著呼叫基類waighandle的waitone()方法。程式塊在waitone()方法中暫停一秒,然後因為超時而退出。manualresetevent的狀態仍然是false,因而waitone()返回的布林值b是false。

下面的例子把有訊號改為無訊號,呼叫reset()方法,set()方法。

[csharp]view plain

copy

using system;  

using system.collections.generic;  

using system.text;  

using system.threading;  

namespace 同步  

}  }   

在manualreset中,mnualtresetevent物件的建構函式將其狀態設定為有訊號(true),結果,執行緒不在第乙個

waitone()方法中等待,並返回true值。接著,manualresetevent物件的狀態重新設定為無訊號的(false),於是執行緒在超時之前必須等待5秒,呼叫set()方法後也不用等待。

下面在看乙個程式:

[csharp]view plain

copy

using system;  

using system.collections.generic;  

using system.text;  

using system.threading;  

namespace 同步實驗  

}    

static void main(string args)  

}  while (thrd1.isalive)  

}  }  }  

下面在看乙個關於manualresetevent waitany的程式:

waitany一直等到有訊號 才開始執行下面的語句.

[csharp]view plain

copy

using system;  

using system.collections.generic;  

using system.text;  

using system.threading;  

namespace 同步實驗  

static void main(string args)  

}  }  public class trigger   

}  }  要注意的是manualresetevent和autoresetevent 的建構函式都有乙個bool的引數,用這個引數可以指定初始情況下,同步物件的處於阻塞(設定為false)還是非阻塞(設定為true)的狀態。 

另外waitone方法也可以帶兩個引數: 

waitone (int millisecondstimeout,bool exitcontext) 

millisecondstimeout:等待的毫秒數,或為 timeout.infinite (-1),表示無限期等待。 

exitcontext:為 true,則等待之前先退出上下文的同步域(如果在同步上下文中),然後在稍後重新獲取它;否則為false。 

就是說,等待是可以加上乙個期限的,如果等待的同步物件一直都不set()的話,那麼程式就會卡死,所以在waitone方法裡面可以放置乙個時間期限,單位是毫秒。

執行緒!執行緒!!執行緒!!! Delphi版

以下內容僅供初學者參考 看到有的同學對delphi的執行緒認識不夠深,特開一貼給同學們講講。主要給出兩種常用的執行緒形式。1 長等待型執行緒示例,等待命令,執行不定長的工作,但每個工作的時間不會太長。2 長工作型執行緒示例,執行乙個很長時間的工作,但可以很快響應取消操作。以下程式所用的知識為 訊息機...

執行緒 執行緒控制代碼 執行緒ID

什麼是控制代碼 控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體位址。應用程式啟動後,組成這個程式的各物件是住留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首位址,那麼就可以隨時用這個位址訪問物件。但是,如果您真的這樣認為,那麼您就大錯特錯了。我們知道,windows是乙個以...

執行緒 執行緒控制代碼 執行緒ID

什麼是控制代碼 控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體位址。應用程式啟動後,組成這個程式的各物件是住留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首位址,那麼就可以隨時用這個位址訪問物件。但是,如果您真的這樣認為,那麼您就大錯特錯了。我們知道,windows是乙個以...