gpt4 book ai didi

c# - 以每秒 x 间隔执行时如何避免重叠?

转载 作者:行者123 更新时间:2023-11-30 20:50:51 25 4
gpt4 key购买 nike

我有一些代码每秒每 *x*ms 写入一个套接字(例如每 100 毫秒写入一个套接字)并将响应输出到控制台。

问题是当结果被写入控制台时,有时会出现重复的计时,这意味着两个套接字发送可以说是在完全相同的时间点发送的。代码如下所示。 (客户端和服务器之间的连接始终小于半毫秒)。

编辑:愚蠢地忘了提及这是一个多线程软件,有 4 个线程在下面运行相同的逻辑。

// Edit: Eurgh I typed this out stupidly. These belong to the class not method.
var milliseconds = 100; // How long to sleep between each socket write.
var lastSendTime = 0;

//....setup socket etc....
while(true)
{
// Keep waiting until were ready..
while(((DateTime.UtcNow.Ticks / 10000) - (lastSendTime)) < milliseconds)
{
await Task.Delay(1); // Await so as not to affect performance
}

lastSendTime = DateTime.UtcNow.Ticks / 10000;

// .. socket send and receive..
Console.WriteLine("[" + DateTime.UtcNow.Ticks / 10000 + "]" + ":" + response);
}

当然,重复输出的示例如下(注意前两行):

[63529897318427]:response
[63529897318427]:response
[63529897318527]:response
[63529897318627]:response

那么为什么有时会发生这种情况,我该如何预防呢?

最佳答案

您的代码就是所谓的 Critical Section .您可以使用 Mutex 来确保代码一次只执行一个。看看Mutex class

这是一个很好的使用示例: http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx#vcwlkthreadingtutorialexample4mutex

关于c# - 以每秒 x 间隔执行时如何避免重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22272787/

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