2016-02-26 61 views
0

這兩個代碼有什麼區別? 什麼是最好的/最快的方式。 試圖讓我自己的WM_TIMER線程。std :: this_thread :: get_id()與傳遞ID

第一:timerThreadProc

與get_id()

DWORD WINAPI timerThreadProc(DWORD dwMilliseconds) 
{ 
    while (!bExit) 
    { 
     if (std::this_thread::get_id() == hTimer1Thread.get_id()) 
     { 
      // do what ever 
      Beep(10000, 100); 
     } 

     if (std::this_thread::get_id() == hTimer2Thread.get_id()) 
     { 
      // do what ever 
      Beep(1000, 100); 
     } 

     Sleep(dwMilliseconds); 
    } 
    return 1; 
} 

第二:timerThreadProc

而不get_id()

#define TIMER1 1 
#define TIMER2 2 
DWORD WINAPI timerThreadProc(UINT ID, DWORD dwMilliseconds) 
{ 
    while (!bExit) 
    { 
     if (ID == TIMER1) 
     { 
      // do what ever 
      Beep(10000, 100); 
     } 

     if (ID == TIMER2) 
     { 
      // do what ever 
      Beep(1000, 100); 
     } 

     Sleep(dwMilliseconds); 
    } 
    return 1; 
} 

回答

1

第一個例子使用的設施在C++庫以確定當前正在運行的線程是否爲hTimer1Thread的線程,或hTimer2Thread的線程。

第二個示例通過將其參數與預先定義的常量進行比較來執行可比較的任務,大概是指同一個兩個線程。

這就好像你總結的那樣;但這裏沒有提到的是,第二種方法還必須在顯示的代碼之外還需要一些額外的支持,以跟蹤執行線程代表的內容,並將其映射到兩個預定義的常量之一。你必須根據所示的實施來推測這一點。

因此,在這裏確定什麼是「最好/最快」的方式是不可能的。

什麼是「最快」在很大程度上取決於C++庫實現的內部細節。例如,get_id()this_thread或某個任意線程是否被內聯,並且效率如何。然而,與第二個例子中使用的額外帶外方法相比,效率更高。

什麼是「最好」還取決於應用程序的其餘部分。根據應用程序需求和行爲的細節,第一種方法可能會稍微好一點。第二種方法也可能稍微好一點。

但是,更有可能的是,鑑於現代化的,快速的CPU和現代化的智能優化編譯器,它不會帶來任何可衡量的差異,而且這完全降低了整體代碼的風格和可維護性。

這意味着您自己將成爲回答此問題的最佳人選,因爲您對此特定應用程序的瞭解比其他任何人都更瞭解stackoverflow.com