91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
布尔津县| 沛县| 临泽县| 门头沟区| 通山县| 林西县| 昌吉市| 大安市| 文安县| 三原县| 宜兴市| 万宁市| 宜丰县| 安岳县| 扶余县| 塔城市| 新晃| 乌鲁木齐市| 大荔县| 禄丰县| 邯郸市| 连山| 灵武市| 玉溪市| 壤塘县| 论坛| 桂东县| 福建省| 比如县| 永清县| 阿瓦提县| 崇阳县| 尼勒克县| 泰宁县| 营山县| 隆回县| 岳普湖县| 建德市| 海原县| 浮山县| 获嘉县|