Multithreading 线程优先级和函数执行时间

Multithreading 线程优先级和函数执行时间,multithreading,visual-studio-2008,c++-cli,execution-time,Multithreading,Visual Studio 2008,C++ Cli,Execution Time,我有一个函数,我们称之为foo(),它对矩阵执行一些操作。 如果在控制台应用程序中调用该函数,则需要1秒来返回结果。 如果我在Windows窗体应用程序中调用它(单击按钮、启动新线程、从线程调用foo()),该函数需要3秒钟才能返回。输入相同,输出明显相同。 我认为这是因为处理windows窗体的线程仍然处于活动状态,如何停止它,或者降低它的优先级 我真的不明白为什么要终止表单事件线程。这将使您的应用程序无法使用。该线程没有运行计算密集型任务,它正在等待表单上的事件,因此将优先级设置为低并没有什

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

我真的不明白为什么要终止表单事件线程。这将使您的应用程序无法使用。该线程没有运行计算密集型任务,它正在等待表单上的事件,因此将优先级设置为低并没有什么好处


请指定如何准确测量线程完成所需的时间。启动/停止线程会产生一些开销,而这些开销不会出现在控制台应用程序中。

我使用c_clock来测量计算函数的时间,不知道如何测量线程处理表单所花费的时间,因为我不知道如何访问该线程,这就是为什么我“认为”我要使用分析器的原因。使用
clock
进行测量将非常不精确,因为.NET在你背后做了很多事情,这会破坏这些简单的测量;foo();时钟未完成(时钟());int n=完成-开始;在控制台的情况下,该值约为1000,在windows窗体中约为3500。这听起来真奇怪。该函数实际上是相同的,我添加了一个线程调用的按钮点击。。。也就是说,您是如何从线程中发出“n”信号并显示它,还是在调试器中断时停止线程并在计算后检查它?这个值应该是相同的,正如@Tudor所暗示的——它是做相同工作的相同核心类型。在1000-3000个处理器滴答声中,如果您发现foo()被任何东西打断,那将是不幸运的,我相信您已经不止一次地完成了测试。一旦由任何线程启动,foo()很可能会一直运行到返回和第二次时钟调用。我发现,在opencv库中定义的函数在windows窗体中所花费的时间是在console中的4倍。我刚刚重写了函数,性能几乎相同。