作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
关于使用 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/
我是一名优秀的程序员,十分优秀!