我如何告诉Windows XP / 7在我的代码的某个部分中不要切换线程?

我想阻止在Windows XP / 7中的线程切换在后台线程中运行的代码的时间关键部分。 我敢肯定,我不能创造一种情况,我可以保证不会发生,因为从系统驱动程序等优先级较高的中断。但是,我想降低线程切换的可能性在该部分我的代码尽可能less。 是否有任何创build线程标志或窗口API调用可以帮助我? 一般的技巧提示也被赞赏。 如果有办法做到这一点,而不必将线程的优先级提高到实时关键,那就太好了,因为我担心为用户创build系统性能问题。

更新:我看到我的原始post的第一个响应后添加此更新。 激发这个问题的具体应用与实时audiostream有关。 我想消除每一点延迟,我可以。 编码了我的原始devise后,我发现一个线程切换可能会导致70毫秒或更多的时间延迟。 由于我的应用程序位于两个用作传递audio的中间人之间的套接字之间,因此我立即收到一个audio缓冲区,我想立即转身将其推出目标套接字。 我的原始devise使用了两个合作线程和一个信号量,因为有一个线程pipe理源套接字,另一个线程是目标套接字。 这种架构是从sockets背后的两个设备是不同的实体演化而来的。

我意识到,如果我将两个套接字组合到同一个线程中,我可以编写一个代码块,立即对套接字数据收到的消息作出反应,并一次性将其转向目标套接字。 现在,如果我可以尽我所能避免中间线程切换,那么这将是用于最小化延迟的最佳编码体系结构。 重复一下,我知道我不能保证这种情况,但我正在寻找关于如何编写这样做的代码块的提示/build议,并尽可能地最小化插入线程切换的机会。

请注意,我知道套接字背后的O / S代码引入了自己的(潜在的)延迟。

AFAIK在CreateThread等没有这样的标志(这也没有意义恕我直言)。 在关键情况下(通过枚举它们并使用SuspendThread ),您可能会在执行过程中将其他线程从执行中SuspendThread ,并且理论上您可能枚举并挂起其他进程中的线程。

OTOH snoozing线程通常不是一个好主意,最终你可能会调用一些第三方代码,这些代码会隐含地等待在其他线程中完成的任务,而这些线程已经暂停。

恕我直言 – 你应该使用什么建议案 – 玩线程/进程优先(也可以考虑SetThreadPriorityBoost )。 此外,操作系统倾向于将优先级提高到通常不积极使用CPU的线程。 也就是说,线程经常工作,但在很短的时间内(在调用其中一个暂停它们的等待函数,直到某些条件之前)被认为表现“很好”,并且它们被优先化。