2

我将用 C++ 编写一个控制大型 CNC 机床的接口,它将在 Windows 上运行。出于安全原因,我希望这个进程在它自己的核心上运行,以便它可以实时运行该进程。如果它与 Windows 共享一个内核,那么所有的 Windows 进程都会在我的进程之前被处理。基本上,我如何确保我的进程始终位于处理队列的前面,或者我如何指定一个核心来运行我的进程并让另一个核心来处理 Windows?另外,有什么方法可以看到我的程序是实时运行的。AKA,这个核心正在处理这个程序,但是这个核心没有做任何事情,因为我们告诉程序不要在它上面运行。任何输入都会有所帮助。

4

3 回答 3

4

无法保证您的流程将得到实时处理。Windows 不这样做。既然你提到安全,我就提一下,如果发生诉讼,你将陷入困境。专家证人将证明该设计本质上是不安全的。

用户控制和显示可以在 Windows 中完成,但实时操作属于 PLC 等专用硬件。

于 2014-01-28T21:07:27.623 回答
1

作为替代方案,Windows Embedded Compact是一种基于实时优先级的操作系统,可以做出软实时保证(远优于 Windows Vista/7)。它的成本很高,但与其他商业 RTOS 相当。

于 2014-01-28T21:42:47.813 回答
1

您可以使用SetThreadAffinityMask将线程限制为在可用处理器/内核的某些子集上运行。

如果您使用SetThreadPriorityandSetProcessPriorityClass将线程设置为实时优先级,则只有以实时优先级运行的其他线程才能中断它,从而有效地强制其他线程在其他内核上运行(除非您将两个或更多线程提高到实时优先级。

于 2014-01-28T18:51:44.380 回答