gpt4 book ai didi

.NET Backgroundworker对象的线程优先级

转载 作者:行者123 更新时间:2023-12-04 00:24:15 26 4
gpt4 key购买 nike

我正在尝试在正在开发的应用程序中使用.NET Backgroundworker对象。

互联网上的所有 Material 都说此对象在“后台”运行,但是我无法确认该后台线程确实在“低优先级”模式下运行。之所以会出现此问题,是因为在Windows(我假设)中,后台任务可以以“正常”或“低于正常”或“低”优先级模式运行。

在我的应用程序中,我尝试通过调用以下方法在DoWork函数中自行设置优先级:
...

Thread.CurrentThread.Priority=ThreadPriority.Lowest

...

但这似乎没有效果。后台工作人员会忽略此调用吗?

我想进一步解释一下:

我的应用程序是一个Internet客户端,它从腔室收集有关温度,湿度等的实时数据,并使用
system.net.webclient.UploadValuesAsync(...)调用

我已经编写了应用程序,以便客户端GUI从 session 厅收集数据,对数据加时间戳,然后将其排队以便上载,如下所示

...
Synclock objlock
debug.print("Queueing reading...")
dataQ.Enque(reading)
End Synclock
...

后台工作人员的Dowork函数出队,然后像这样上载...

..............
Do
if dataQ.count() <> 0 then
Synclock objlock
reading = dataQ.DeQue()
End Synclock
Dim client As New System.Net.WebClient
...put the reading in NameValueCollection and upload to server page
req = new NameValueCollection
...
...
client.UploadValuesAsync(uri, "POST", req)
endif
thread.sleep(1) 'without this line the CPU usage goes upto 100% and seems to slow other tasks!
Loop

................

当我运行程序时,我发现每当调用UploadValuesAsync时,调试窗口就会停止。我还添加了调试语句,以随时查看队列中有多少读数。如果此任务确实以低优先级运行,我希望看到队列数随着数据的获取而迅速增加,然后仅在前台空闲且未获取数据时才减少。但这种情况并非如此。一旦将读数添加到队列中,便将其出队并上载。因此,队列计数始终为1或0!

我的方法有什么问题吗?我应该完全不使用背景 worker 对象吗?

顺便说一句,这是在运行Windows XP的双核笔记本电脑中。

最佳答案

只是为了补充乔恩和马克已经说过的话:

后台线程没有较低的优先级。前台线程和后台线程之间的区别在于,一旦不再运行前台线程,CLR将关闭进程。线程池线程是后台线程。

您实际上可以设置线程池线程的优先级,但是由于几乎无法控制哪个线程池线程将实际运行任务,因此不建议这样做。如果需要特定优先级的线程,则应使用“线程”类型创建它们,并根据需要在实例上设置优先级。

关于.NET Backgroundworker对象的线程优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/524483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com