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是乙個以...