Multithreading 防止线程未计划

Multithreading 防止线程未计划,multithreading,winapi,Multithreading,Winapi,我尝试使用winapi实现一些功能,以防止线程被单个进程内其他正在运行的线程中断 我的第一个ID是把这个线程放在一个更高的优先级,如果我的线程没有进入任何等待状态,那么它应该阻止其他线程被执行 但是,我真的不明白为什么,在这个技巧之后,其他线程仍然被安排 除了在所有其他线程上使用SuspendThread,我没有其他想法 有没有更干净的方法?关于我的问题,你有什么建议吗?线程是在操作系统范围内安排的,而不仅仅是一个进程。您可以将prio更改为31。这将是最高的可能。。。但是如果其他线程也使用Pr

我尝试使用winapi实现一些功能,以防止线程被单个进程内其他正在运行的线程中断

我的第一个ID是把这个线程放在一个更高的优先级,如果我的线程没有进入任何等待状态,那么它应该阻止其他线程被执行

但是,我真的不明白为什么,在这个技巧之后,其他线程仍然被安排

除了在所有其他线程上使用SuspendThread,我没有其他想法


有没有更干净的方法?关于我的问题,你有什么建议吗?

线程是在操作系统范围内安排的,而不仅仅是一个进程。您可以将prio更改为31。这将是最高的可能。。。但是如果其他线程也使用Prio31运行,那么您的线程也将被中断。。。此外,所有硬件事件IRQ的优先级将高于31

如果您只想拥有一个流程范围的解决方案,我建议使用。使用光纤,您可以自行安排时间,还可以防止其他光纤中断您的任务。当然,它仍可能被其他线程中断。但是如果你用Prio31运行你的线程,这应该不是什么大问题

在这种情况下,我们运行具有Profibus连接的高响应几乎实时的系统。。。此外,SQL server正在使用光纤模式进行优化和非常高的性能模式

或者,您可以修改并限制所有其他进程的进程关联掩码!要修改所有流程,您需要将流程作为系统启动,例如通过服务启动流程

如果您只关心自己的进程,那么可以修改并限制自己进程中所有其他线程的线程关联性

请注意,将重要线程限制在特定CPU上是没有意义的!这只会限制你的线程。但是您必须限制所有其他线程/进程,以使您的重要线程获得最佳性能


<>也意识到你永远不应该考虑使用!这可能会导致死锁。。。另请参见:/

被其他线程中断哪些其他线程?在您自己的程序中还是在整个系统中?因为后者即使不是不可能,也是非常困难的。也许你应该考虑改用锁/互斥/临界部分。线程可以进入等待状态,其原因基本上是你调用的任何系统函数都无法预料的。如果你担心数据竞争或类似的问题,那么就使用适当的锁机制,比如互斥锁或信号量。不可能有一个不间断的线程。如果你能做到这一点,并且你的程序运行在一个单核处理器上,计算机就会冻结,无法对硬件输入做出反应。即使在旧的Windows 3.1(一个只有一个“系统范围线程”的非预防性协作系统)中,您的代码也会被硬件事件中断。如果你提供一些关于你要解决的问题的更多信息,也许有人可以为你的问题提出一个合适的解决方案。你想达到什么目标?