gpt4 book ai didi

c# - 当用于暂停线程时,循环 Thread.Sleep() 是否会影响性能?

转载 作者:太空狗 更新时间:2023-10-29 22:57:28 25 4
gpt4 key购买 nike

关于使用 Thread.Sleep() 方法是好是坏,有(或已经有)很多讨论。据我了解,它主要用于调试目的。

现在我想知道:用于我的特定目的是否不好,即不断循环它以能够暂停/恢复线程?我这样做是因为我想暂停执行 I/O 操作的线程并能够以简单的方式恢复它。

I/O 操作基本上只是将 4096 字节的 block 写入文件,直到所有数据都写入文件。由于文件可能很大并且需要很长时间,我希望能够暂停操作(以防它开始占用大量系统资源)。

我的代码,VB.NET 版本:

'Class level.
Private BytesWritten As Long = 0
Private Pause As Boolean = False

'Method (thread) level.
While BytesWritten < [target file size]
...write 4096 byte buffer to file...

While Pause = True
Thread.Sleep(250)
End While

...do some more stuff...
End While

C# 等价物:

//Class level.
long bytesWritten = 0;
bool pause = false;

//Method (thread) level.
while(bytesWritten < [target file size]) {
...write 4096 byte buffer to file...

while(pause == true) {
Thread.Sleep(250);
}

...do some more stuff...
}

我听说过 ResetEvents 并且对它们的作用略知一二,但我从未真正深入研究过它们。

最佳答案

我想,根据描述,我会这样做

'Class level.
Private BytesWritten As Long = 0
Private NotPaused As New Threading.ManualResetEvent(True)

变量名的变化是合适的,因为这是它的使用方式

    'Method (thread) level.
While BytesWritten < [target file size]
'...write 4096 byte buffer to file...

NotPaused.WaitOne(-1)

'...do some more stuff...
End While

要使循环暂停执行此操作

    NotPaused.Reset()

继续

    NotPaused.Set()

关于c# - 当用于暂停线程时,循环 Thread.Sleep() 是否会影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38546101/

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