我将用C ++编写一个控制大型CNC机器的接口,它将在Windows上运行。出于安全原因,我希望此过程在其自己的核心上运行,以便它可以实时运行该过程。如果它与Windows共享一个核心,那么所有Windows进程都将在我的进程之前处理。基本上,我如何确保我的进程始终位于处理队列的前面,或者如何指定核心来运行我的进程并让另一个核心处理Windows?另外,有没有办法看到我的编程是实时运行的。 AKA,这个核心正在处理这个程序,但是这个核心没有做任何事情,因为我们告诉程序不要运行它。任何输入都会有所帮助。
答案 0 :(得分:4)
无法保证您的流程会实时处理。 Windows不会这样做。既然你提到了安全问题,我会提到,如果你提起诉讼,你就会陷入困境。专家证人将证明该设计本质上是不安全的。
用户控制和显示可以在Windows中完成,但实时操作属于专用硬件,如PLC。
答案 1 :(得分:1)
您可以使用SetThreadAffinityMask
限制某个线程在某些可用处理器/核心子集上运行。
如果使用SetThreadPriority
和SetProcessPriorityClass
将线程设置为实时优先级,则只有以实时优先级运行的其他线程才能中断它,从而有效地强制其他线程在其他内核上运行(除非你将两个或多个线程提升为实时优先级。
答案 2 :(得分:1)
作为替代方案,Windows Embedded Compact是一个基于实时优先级的操作系统,可以实现软实时保证(远远优于Windows Vista / 7)。它的成本很高,但与其他商业RTOS相当。