C++ 如何提高C+的I/O优先级+;windows上的进程

C++ 如何提高C+的I/O优先级+;windows上的进程,c++,windows,performance,C++,Windows,Performance,我正在从事一个项目,该项目通过USB 3.0使用一块FPGA硬件的数据 目前,硬件中的缓冲区非常小,因此我几乎没有时间使用硬件中的数据,而不会在硬件的FIFO中出现缓冲区溢出。在我的测试中,在关键线程中注入6毫秒睡眠足以导致硬件缓冲区溢出 现在,我几乎无法使事情正常运行,将线程固定在一个核心上(结果表明,OS调度器将我的线程从一个核心移动到另一个核心足以导致线程溢出),并将线程优先级设置为尽可能高的优先级(+15,对应于非管理员“实时”。显然,值高达31在技术上是有效的,但存在windows权限

我正在从事一个项目,该项目通过USB 3.0使用一块FPGA硬件的数据

目前,硬件中的缓冲区非常小,因此我几乎没有时间使用硬件中的数据,而不会在硬件的FIFO中出现缓冲区溢出。在我的测试中,在关键线程中注入6毫秒睡眠足以导致硬件缓冲区溢出

现在,我几乎无法使事情正常运行,将线程固定在一个核心上(结果表明,OS调度器将我的线程从一个核心移动到另一个核心足以导致线程溢出),并将线程优先级设置为尽可能高的优先级(+15,对应于非管理员“实时”。显然,值高达31在技术上是有效的,但存在windows权限问题(更高)

基本上,我正在尝试在windows中做一件近乎实时的事情,我意识到这不是最好的主意,但不幸的是,那艘船已经开航了

因此,鉴于上述情况,我想看看增加I/O优先级是否可能有所帮助


如何(以编程方式)提高windows上进程的IO优先级?

我很同情你。一个高优先级的任务花费的时间有点太长,jig启动了,而且windows中有些东西你无法提升到上面。也就是说,看起来像你要找的吗?@user4581301-我从来都无法得到不返回权限错误的特定调用。我使用的是
SetThreadPriority()
,但它似乎有效。从文档中看,
SetPriorityClass
似乎需要
过程设置信息的访问权限,我不清楚如何获得该权限。我正在通过
std::thread
生成我的线程,它看起来像是使用
CreateProcessWithTokenW()
作为线程来操作我的线程配置标志,这将涉及重写我已经准备好的大多数线程基础结构。您使用哪个API来读取数据?只是一个阻塞ReadFile()或类似的东西?在LibUSB中。这是一个供应商提供的包装USB设备的库。事实上,我并不完全确定I/O优先级是否会影响它(我认为USB I/O在windows中被归为I/O优先级),但我现在没有多少想法了。我支持你。一个高优先级的任务花费的时间有点太长,jig启动了,而且windows中有些东西你无法提升到上面。也就是说,看起来像你要找的吗?@user4581301-我从来都无法得到不返回权限错误的特定调用。我使用的是
SetThreadPriority()
,但它似乎有效。从文档中看,
SetPriorityClass
似乎需要
过程设置信息的访问权限,我不清楚如何获得该权限。我正在通过
std::thread
生成我的线程,它看起来像是使用
CreateProcessWithTokenW()
作为线程来操作我的线程配置标志,这将涉及重写我已经准备好的大多数线程基础结构。您使用哪个API来读取数据?只是一个阻塞ReadFile()或类似的东西?在LibUSB中。这是一个供应商提供的包装USB设备的库。事实上,我并不完全确定I/O优先级是否会影响它(我认为USB I/O在windows中是按I/O优先级分组的),但目前我没有多少想法。