从线程到主程序的反馈

时间:2011-01-27 13:22:37

标签: vb.net multithreading visual-studio-2008 simulation

我的软件将模拟几百个硬件设备,每个设备都会向数据库服务器发送数千个报告。

在没有线程的情况下尝试它并没有给出非常好的结果,所以现在是时候进行线程了。

由于我正在对d / b服务器进行负载测试,因此其中一些事务会成功,有些事务可能会失败。主程序的GUI需要反映这一点。线程应该如何将结果传回主程序?更新全局变量?发送消息?还是什么呢?

现在,如果我只在每个线程结束时更新,那么GUI将看起来相当无聊(我无法判断程序是否挂起)。定期更新GUI可能会很好。但这可能会导致争用,线程等待其他线程更新(例如,如果我正在写入全局变量,我需要一个互斥锁,它将阻止等待写入的每个线程)。

我是线程新手。这通常是怎么做的?也许主程序可以轮询线程,而不是线程来判断主程序?

1 个答案:

答案 0 :(得分:2)

组织此方法的一种方法是让线程在获取数据时将消息添加到线程安全队列(例如ConcurrentQueue)。为了简单起见,您可以在UI中使用一个计时器线程,该计时器线程会定期将排队的消息出列到私有列表,然后呈现它们。这种设计允许您的线程轻松地排队并忘记消息,并且争用最少,并且UI可以定期更新自己而不会过多地阻止您的编写者(即仅将当前消息出列到私有列表所花费的时间)。

虽然您正在尝试模拟数百个设备的负载,但是使用每个设备的线程不是建模的方法,因为您无论如何只能同时运行这么多线程。