0

我有一个函数让我们称之为foo(),它对矩阵执行一些操作。 如果我在控制台应用程序中调用该函数,则需要1秒才能返回结果。 如果我在Windows窗体应用程序中调用它(按钮单击,启动一个新线程,从线程调用foo()),该函数需要3秒钟返回。显然具有相同的输入和相同的输出。 我认为这是因为处理Windows窗体的线程仍处于活动状态,我该如何阻止它,或者减慢它的优先级?线程优先级和函数执行时间

+0

不要“想”。测量。 – 2012-01-18 08:11:27

+0

以及我使用c_clock来衡量计算函数的时间,不知道如何衡量线程处理表单花费的时间,因为我不知道如何访问该线程,这就是为什么我“想” – andrea 2012-01-18 08:21:12

+0

我的意思是使用分析器。使用'clock'测量将是非常不精确的,因为.NET会在背后做很多事情,这会破坏这些简单的措施。 – 2012-01-18 09:27:53

回答

1

我不明白为什么要杀死表单事件线程。这会导致您的应用程序无法使用。该线程并不是运行计算密集型任务,而是等待表单上的事件,因此将优先级设置为低电平几乎没有什么收获。

请说明您测量线程完成所花费的时间的精确程度。与启动/停止线程相关的某些开销不会出现在控制台应用程序中。

+0

我这样做:clock_t finish(clock()); FOO(); clock_t finish(clock()); int n =完成 - 开始;在控制台的情况下,值约为1000,窗口的形式是3500左右。这听起来真的很奇怪。这个函数真的是一样的,我添加了一个按钮点击调用的线程...就是这样 – andrea 2012-01-18 08:54:28

+0

如何将'n'指示出线程并显示它,或者在调试器中断处停止线程并检查它计算之后呢?值应该是相同的,正如@Tudor所暗示的那样 - 这是同一个核心类型做同样的工作。在1000-3000处理器中,你会很不幸地发现foo()被任何事情打断,我相信你已经做了不止一次的测试。一旦由任何线程启动,很有可能foo()会运行直到返回和第二个clock_t调用。 – 2012-01-18 09:52:06

+0

以及我发现在opencv库中定义的函数在窗体中比在控制台中多4倍。我只是重写了功能,性能几乎相同。 – andrea 2012-01-18 11:48:28