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