亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

C#中ManualResetEvent實現線程的暫停與恢復

c#
小云
149
2023-08-08 14:47:15
欄目: 編程語言

在C#中,可以使用ManualResetEvent來實現線程的暫停和恢復。ManualResetEvent是一個同步對象,它包含一個布爾值,表示是否發出信號。當布爾值為true時,表示信號已發出,線程可以繼續執行;當布爾值為false時,表示信號未發出,線程需要暫停等待。

下面是一個示例代碼,演示了如何使用ManualResetEvent來實現線程的暫停和恢復:

using System;
using System.Threading;
public class Program
{
private static ManualResetEvent pauseEvent = new ManualResetEvent(true); // 初始狀態為true,線程可以繼續執行
public static void Main(string[] args)
{
Thread thread = new Thread(WorkerThread);
thread.Start();
Console.WriteLine("Press any key to pause the thread...");
Console.ReadKey();
PauseThread(); // 暫停線程
Console.WriteLine("Press any key to resume the thread...");
Console.ReadKey();
ResumeThread(); // 恢復線程
Console.WriteLine("Press any key to stop the thread...");
Console.ReadKey();
StopThread(); // 停止線程
}
private static void WorkerThread()
{
while (true)
{
// 檢查是否暫停線程
pauseEvent.WaitOne();
// 執行任務
Console.WriteLine("Working...");
// 模擬耗時操作
Thread.Sleep(1000);
}
}
private static void PauseThread()
{
pauseEvent.Reset(); // 設置為false,線程將暫停等待
}
private static void ResumeThread()
{
pauseEvent.Set(); // 設置為true,線程將繼續執行
}
private static void StopThread()
{
pauseEvent.Set(); // 設置為true,確保線程可以繼續執行以結束循環
// 其他處理邏輯...
// 終止線程
Environment.Exit(0);
}
}

在上面的示例中,程序創建了一個線程(WorkerThread),并在主線程中通過按鍵的方式來控制線程的暫停和恢復。在WorkerThread中,使用pauseEvent的WaitOne方法來檢查是否暫停線程,如果暫停,則線程會處于等待狀態,直到調用ResumeThread方法將pauseEvent設置為true,線程才會繼續執行。

需要注意的是,使用ManualResetEvent來實現線程的暫停和恢復時,線程不能被阻塞在其他的同步對象(如Mutex、Semaphore等)上,否則可能會出現死鎖的情況。

0
阳春市| 武隆县| 若羌县| 北京市| 梅河口市| 山西省| 张家港市| 竹溪县| 青浦区| 资兴市| 横山县| 德惠市| 弥渡县| 阳原县| 大丰市| 十堰市| 博兴县| 沂水县| 五台县| 和龙市| 桂阳县| 泰宁县| 汝城县| 巢湖市| 宿州市| 宁河县| 温泉县| 左贡县| 宣恩县| 无为县| 阿合奇县| 孝义市| 子长县| 天峨县| 金华市| 顺平县| 大新县| 乌苏市| 乌拉特中旗| 马龙县| 台东市|