gpt4 book ai didi

c - 防止应用程序从其他应用程序获取资源

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:41 24 4
gpt4 key购买 nike

我有一个应用程序需要执行大量 CPU 和 I/O 繁重的工作。在完成这项工作时,它不应干扰其他应用程序。

例如,如果另一个应用程序正在充分利用我的应用程序正在读取的磁盘,我希望我的应用程序将其磁盘访问速度降低到非常低的速度,以免干扰其他应用程序。 CPU 也是如此;例如,如果另一个应用程序正在编码视频,我不想从中窃取很多周期。

我已经尝试将我的线程置于后台模式,但我发现这些线程不会利用未使用的资源。在没有其他应用程序运行并且几乎没有 CPU 或磁盘使用的情况下,在普通优先级线程上需要 1 秒的操作在后台线程上最多需要 5 分钟。

winapi 是否提供任何帮助我解决这个问题的东西?

下面是我的应用程序磁盘使用情况的图片,后台线程试图计算一个 800 MB 文件的 SHA1 哈希值。如您所见,它几乎没有使用我的磁盘。在正常优先级上,它保持 20 MB+ 读取。

disk usage

编辑:澄清一下,“后台线程”是指优先级设置为后台模式的线程,而不是 C# 后台线程。

SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN);

最佳答案

您的代码很好——THREAD_MODE_BACKGROUND_BEGIN 是您向系统发出该线程是后台线程并且其 I/O 将被视为 low-priority 的方式。 .您可以使用 SetPriorityClassPROCESS_MODE_BACKGROUND_BEGIN 在整个进程范围内实现相同的效果。您甚至可以使用 SetFileInformationByHandleFileIoPriorityHintInfo 控制文件句柄粒度。

所以你已经在做你打算做的事了。但是您发现您的任务没有获得任何资源。这只能意味着至少有一个其他线程在运行,并且一个高于后台优先级的线程正在使用资源。

关于c - 防止应用程序从其他应用程序获取资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21122431/

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