欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中EventWaitHandle的用法小結(jié)

 更新時間:2025年04月15日 10:22:56   作者:wangnaisheng  
EventWaitHandle是C#中用于線程間同步的一個類,它提供了對共享資源的訪問控制,以及線程間的同步機制,本文就來介紹一下EventWaitHandle用法,具有一定的參考價值,感興趣的可以了解一下

EventWaitHandle 是 C# 中用于線程間同步的一個類,它提供了對共享資源的訪問控制,以及線程間的同步機制。EventWaitHandle 類位于 System.Threading 命名空間下,主要用于實現(xiàn)互斥訪問、信號量控制等場景。

創(chuàng)建 EventWaitHandle

創(chuàng)建一個 EventWaitHandle 需要指定兩個參數(shù):初始狀態(tài)和重置模式。

using System.Threading;

// 創(chuàng)建一個初始狀態(tài)為未設(shè)置的自動重置事件
EventWaitHandle autoEvent = new EventWaitHandle(false, EventResetMode.AutoReset);

// 創(chuàng)建一個初始狀態(tài)為設(shè)置的自動重置事件
EventWaitHandle manualEvent = new EventWaitHandle(true, EventResetMode.ManualReset);

使用 EventWaitHandle

設(shè)置和重置事件

  • Set(): 當(dāng)事件被設(shè)置時,所有等待該事件的線程都將被釋放。
  • Reset(): 將事件的狀態(tài)重置為未設(shè)置狀態(tài)。

對于 AutoReset 類型的 EventWaitHandle,一旦設(shè)置狀態(tài)被觸發(fā)后會立即重置回未設(shè)置狀態(tài)。而 ManualReset 類型則需要顯式地調(diào)用 Reset() 方法來重置事件。

manualEvent.Reset();
將manualEvent的狀態(tài)重置為未設(shè)置(即信號量為假)。這通常意味著任何正在等待該事件的線程將繼續(xù)等待。
對于ManualReset類型的EventWaitHandle,這是必須的;否則,即使已經(jīng)調(diào)用了Set()方法,等待中的線程也不會被喚醒。
manualEvent.Set();
將manualEvent的狀態(tài)設(shè)置為已設(shè)置(即信號量為真)。如果有任何線程正在等待這個事件,那么它們將不再等待并繼續(xù)執(zhí)行。
對于ManualReset類型的EventWaitHandle,狀態(tài)需要手動重置才能再次等待。

manualEvent.Set(); // 手動設(shè)置事件
manualEvent.Reset(); // 手動重置事件

等待事件

  • WaitOne(): 使調(diào)用線程進入等待狀態(tài),直到事件被設(shè)置或者超時(如果指定了超時時間)。
autoEvent.WaitOne(); // 無限期等待事件被設(shè)置
bool result = autoEvent.WaitOne(5000); // 在5秒鐘內(nèi)等待事件被設(shè)置

如果寫為 WaitOne(-1) 表示會使當(dāng)前線程阻塞,直到manualEvent被設(shè)置(即信號量變?yōu)檎妫?br />-1表示無限期地等待下去,直到事件被設(shè)置。如果想指定一個等待的超時時間,可以使用毫秒值作為參數(shù)。

示例

這里提供一個簡單的例子來展示 EventWaitHandle 的基本用法:

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        EventWaitHandle eventWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);

        Thread thread = new Thread(() =>
        {
            Console.WriteLine("Thread is waiting for the signal.");
            eventWaitHandle.WaitOne(); // 線程等待信號
            Console.WriteLine("Thread received the signal and continues execution.");
        });

        thread.Start();

        Thread.Sleep(2000); // 主線程等待兩秒后發(fā)送信號
        Console.WriteLine("Main thread signals the waiting thread.");

        eventWaitHandle.Set(); // 發(fā)送信號
        eventWaitHandle.Close(); // 關(guān)閉事件句柄
    }
}

在這個例子中,我們創(chuàng)建了一個手動重置類型的 EventWaitHandle 并在線程中等待信號。主線程等待兩秒后發(fā)送信號給等待的線程。當(dāng)信號被發(fā)送后,等待的線程繼續(xù)執(zhí)行。注意,在使用完畢之后,應(yīng)該關(guān)閉 EventWaitHandle。

注意事項

  • EventWaitHandle 可以是命名的,這意味著它可以跨進程使用,但示例中沒有展示這一點。
  • 如果使用命名的 EventWaitHandle,請確保正確處理互斥和權(quán)限問題。
  • 在使用完 EventWaitHandle 后,應(yīng)當(dāng)調(diào)用 Close() 方法來釋放資源。

到此這篇關(guān)于C#中EventWaitHandle的用法小結(jié)的文章就介紹到這了,更多相關(guān)C# EventWaitHandle內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#學(xué)習(xí)基礎(chǔ)概念二十五問 11-15

    C#學(xué)習(xí)基礎(chǔ)概念二十五問 11-15

    C#學(xué)習(xí)基礎(chǔ)概念二十五問 11-15...
    2007-04-04
  • C#利用XML創(chuàng)建Excel文檔的實現(xiàn)方法

    C#利用XML創(chuàng)建Excel文檔的實現(xiàn)方法

    這篇文章主要介紹了C#利用XML創(chuàng)建Excel文檔的實現(xiàn)方法,需要的朋友可以參考下
    2014-08-08
  • C#中使用OpenCV的常用函數(shù)的常用示例

    C#中使用OpenCV的常用函數(shù)的常用示例

    這篇文章主要介紹了C#中使用OpenCV的常用函數(shù)的常用示例,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • C# 中使用NModbus4通信庫執(zhí)行寫操作

    C# 中使用NModbus4通信庫執(zhí)行寫操作

    在C#中NModbus4庫提供了一個方便的方式來與支持Modbus協(xié)議的設(shè)備進行交互,本文就來介紹了使用NModbus4通信庫執(zhí)行寫操作,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 詳解Unity 實現(xiàn)語音識別功能

    詳解Unity 實現(xiàn)語音識別功能

    語言識別功能已經(jīng)在我們身邊普遍流行起來,在unity開發(fā)中語音識別也非?;馃幔裉炀徒榻B下Unity自帶的語音識別功能的實現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • C#讀取配置文件的方法匯總

    C#讀取配置文件的方法匯總

    本文給大家介紹的是使用C#讀取配置文件的方法,個人給大家總結(jié)了6種,余下的以后再更新,有需要的小伙伴可以參考下。
    2015-06-06
  • C#實現(xiàn)加密exe文件

    C#實現(xiàn)加密exe文件

    這篇文章主要為大家詳細(xì)介紹了C#如何實現(xiàn)加密exe文件的功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • c# 使用Json.NET實現(xiàn)json序列化

    c# 使用Json.NET實現(xiàn)json序列化

    這篇文章主要介紹了詳解C#中的JSON序列化方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-05-05
  • 純C#實現(xiàn)Hook功能詳解

    純C#實現(xiàn)Hook功能詳解

    這篇文章主要介紹了純C#實現(xiàn)Hook功能詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C#中實體類與XML相互轉(zhuǎn)換方式

    C#中實體類與XML相互轉(zhuǎn)換方式

    這篇文章主要介紹了C#中實體類與XML相互轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論