Meh*_*dad 1 c c++ winapi multithreading atl
我有多个线程在后台处理多个文件,而程序是空闲的.
为了提高磁盘吞吐量,我使用关键部分来确保没有两个线程同时使用同一个磁盘.
(伪)代码看起来像这样:
void RunThread(HANDLE fileHandle)
{
// Acquire CRITICAL_SECTION for disk
CritSecLock diskLock(GetDiskLock(fileHandle));
for (...)
{
// Do some processing on file
}
}
Run Code Online (Sandbox Code Playgroud)
一旦用户请求处理文件,我需要停止所有线程 - 除了正在处理所请求文件的线程.处理完文件后,我想再次恢复所有线程.
鉴于这SuspendThread是一个坏主意,我如何停止除处理相关输入的线程之外的所有线程?
我需要什么样的线程对象/功能 - 互斥,信号量,事件或其他什么?我将如何使用它们?(我希望与Windows XP兼容.)
我建议你以完全不同的方式去做.如果你真的只想要每个磁盘只有一个线程(我不相信这是一个好主意)那么你应该为每个磁盘创建一个线程,并在排队文件时进行处理.
为了实现对特定文件的优先级请求,我将在其正常处理期间(当然还有其主队列等待循环)中的几个点检查一个"优先级槽".
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |