有没有办法安排一个具有更高优先级的线程,以便它在 max 后完成工作。 10-20毫秒? ThreadPool.QueueUserWorkItem 很慢

问题描述 投票:0回答:1

有没有办法安排一个具有更高优先级的线程,以便它在最多 10-20 毫秒后完成?

ThreadPool.QueueUserWorkItem
速度很慢,有时需要大约 100 毫秒直到线程完成,这对于我的应用程序来说太多了。

我无法立即执行这些任务,因为它们来自 UART 接收事件,并且在那里做大量工作会导致从 UART 实际接收字节时出现问题,所以我只想将字节放入那里的缓冲区中。

我尝试了

ThreadPool.QueueUserWorkItem
,但太慢了。

c# threadpool uart
1个回答
0
投票

* 您在最初的问题中提出了一个关于可靠使用 UART 的 XY 问题,但我将按照字面上询问的有关线程优先级的方式回答该问题。


具体关于如何设置线程优先级*

您需要操作系统的帮助才能执行此操作。 不过,Windows 不是实时操作系统,因此仍无法保证您的结果。

但是为了实现近乎实时的优先级,您可以做的事情是:

在 C++ 中,

SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);

您可以使用 P/Invoke 从 C# 调用这些 Win32 API 函数。

在 C# 中

您可以在 C# 中接近,但我们无法将线程设置为时间关键优先级。 但这对你来说可能已经足够了。

Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime;
Thread.CurrentThread.Priority = ThreadPriority.Highest;

请注意,实时优先级进程中的时间关键线程如果不产生任何处理器时间,可能会冻结您的系统。

© www.soinside.com 2019 - 2024. All rights reserved.