2011-03-18 49 views
0

我正在使用C++托管2010年在form.h文件中设计GUI。 GUI充当主卡查询从卡的数据流。如何运行项目启动而不需要像启动调试模式一样的调试?

通过使用API​​ win32(CREATETHREAD(...))调用一个函数(在ApplicationIO.cpp文件中)的按钮被调用,其中2个线程被创建:前者用于处理数据流,后者用于用于GUI上的实时数据分析和数据监控。

该项目有两个不同的行为:如果它在调试模式下启动时,它能够更新GUI控件文本框(使用调用)和数据straming期间图表,在启动时不带调试没有数据反之出现在文本框中,和数据在图表上显示得非常缓慢。

有人曾经解决过类似的问题吗?有什么建议吗?

回答

0

一个非常经典的错误是经常使用Control :: Begin/Invoke()。您将使用委托调用请求来泛滥UI线程。 UI更新通常很昂贵,您可以轻松进入消息循环不会执行低优先级任务的状态。像绘画一样。这很容易发生,每秒调用超过一千次就是危险区域,具体取决于代理目标花费多少时间。

您可以通过以实际速率发送更新来解决此问题,这种方式利用了人眼区别它们的能力。每秒25次,更新变成模糊,更新更快只是浪费CPU周期。这给UI线程留下了很多时间来完成它需要做的事情。

当更新代价昂贵时,这可能仍然不够慢。在这一点上,您需要跳过更新或限制工作线程。注意Invoke()自动调节,BeginInvoke()不调用。