gpt4 book ai didi

c# - 使用 waitone() 方法

转载 作者:可可西里 更新时间:2023-11-01 08:58:59 26 4
gpt4 key购买 nike

static Mutex mutex = new Mutex (false, "oreilly.com OneAtATimeDemo");

static void Main()
{
// Wait a few seconds if contended, in case another instance
// of the program is still in the process of shutting down.

if (!mutex.WaitOne (TimeSpan.FromSeconds (3), false))
{
Console.WriteLine ("Another instance of the app is running. Bye!");
return;
}

try
{
Console.WriteLine ("Running. Press Enter to exit");
Console.ReadLine();
}
finally { mutex.ReleaseMutex(); }
}

http://www.albahari.com/nutshell/ch20.aspx

在这段代码中:

if(mutex.WaitOne(TimeSpan.Zero, true)) 
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
mutex.ReleaseMutex();
}
else
{
MessageBox.Show("only one instance at a time");
}

http://sanity-free.org/143/csharp_dotnet_single_instance_application.html

没有 if/bool 的反转。

如果 waitone() 为真,是否意味着实例已经在运行?如果返回 true,当前线程将被阻塞,这意味着调用同一个应用程序的两个进程都将停止?

我的理解是这样的:

// Don't block the thread while executing code. 
//Let the code finish and then signal for another process to enter

没有的含义是什么! (返回真)反之亦然。或者换句话说,无论哪种方式都会发生什么?

我知道 waitAll 例如,等待所有线程完成。 Jon Skeet 在他的网站上展示了一个很好的例子,这一直在我脑海中萦绕(相信他的解释)。所以很明显 waitOne 等待一个线程完成。返回值让我感到困惑。

最佳答案

等待互斥量意味着等待直到您可以获取它。

如果可以在给定时间内获取互斥锁,则互斥锁上的 WaitOne 将返回 true。如果不能,该方法将返回 false。如果已获取互斥锁,则您有责任在使用完后释放互斥锁。

如果您可以获得一个已命名的互斥量,则此时没有其他人拥有它。

所以,回顾一下。如果您可以获得互斥量,则该方法返回 true 并且您是您的应用程序的第一个/唯一实例,关于您的问题。

如果您无法获取互斥量,该方法返回 false 并且当前有另一个应用程序实例拥有该互斥量。

关于c# - 使用 waitone() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/815011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com