2011-01-27 103 views
1

我的软件将模拟几百个硬件设备,每个硬件设备将向数据库服务器发送几千条报告。从主题到主程序的反馈

尝试它没有线程没有给出很好的结果,所以现在是时候线程。

由于我负载测试d/b服务器,其中一些事务将成功,有些可能会失败。主程序的GUI需要反映这一点。线程应该如何将结果返回主程序?更新全局变量?发送一个消息?或者什么东西?

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

我是线程新手。这通常如何完成?也许主程序可以轮询线程,而不是主程序的线程?

回答

2

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

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

+0

+1感谢您提供一些有用的信息。我怎么能告诉我可以同时运行的smany线程?你推荐别的什么?也许让每台PC模拟X设备并使用Y PC,而不是每台设备的总设备数量或一台PC。如何最好地测试这种事情? – Mawg 2011-01-28 01:05:35