有没有办法调度一个具有更高优先级的线程,以便它在最多 10-20 毫秒后完成工作?
ThreadPool.QueueUserWorkItem
速度很慢,有时需要大约 100 毫秒直到线程完成,这对于我的应用程序来说太多了。我无法立即执行任务,因为它们来自 UART 接收事件,并且在那里做大量工作会导致实际从 UART 接收字节时出现问题,所以我只想将字节放入那里的缓冲区中。
我尝试了
ThreadPool.QueueUserWorkItem
,但速度很慢。
* 您在最初的问题中提出了一个关于可靠使用 UART 的 XY 问题,但我将按照字面上询问的有关线程优先级的方式回答该问题。
您需要操作系统的帮助才能执行此操作。 不过,Windows 不是实时操作系统,因此仍无法保证您的结果。
但是为了实现近乎实时的优先级,您可以做的事情是:
SetPriorityClass
将您的进程移至实时优先级。SetThreadPriority
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
您可以使用 P/Invoke 从 C# 调用这些 Win32 API 函数。
您可以在 C# 中接近,但我们无法将线程设置为时间关键优先级。 但这对你来说可能已经足够了。
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime;
Thread.CurrentThread.Priority = ThreadPriority.Highest;
请注意,实时优先级进程中的时间关键线程如果不产生任何处理器时间,可能会冻结您的系统。