2017-08-04 20 views
-1

如果我們創建一個短生命線程(200毫秒到1秒)以在文本框字段中的每個按鍵上執行搜索任務是否存在缺陷?是否有創建大量短壽命線程的缺點?

std::wstring query; 

void DoTheSearch() 
{ 
    // 200ms to 1sec long processing that would block the GUI if no dedicated thread 
    // search a database using query variable 
} 


// main window message loop 
case WM_COMMAND: 
// ... 
    if (wmEvent == EN_CHANGE) 
    { 
     query = GetTheQueryStringFromTextBox(...); 
     DWORD threadID; 
     HANDLE hThread = CreateThread(NULL, 0, DoTheSearch, NULL, 0, &threadID); 
     // there will be a lot (for each keypress) of short-life threads often 
    } 

或者我應該只一個線程用於搜索(用while (True)閒置的大部分時間,並與Sleep(10);裏面?)。


注:我也實行了「反跳」功能,以避免儘可能多的搜索比每個按鍵,但這是不可能的話題在這裏。

+0

你想要做什麼是查找[條件](http://en.cppreference.com/w/cpp/thread/condition_variable)這將讓你有一個單線程沒有'睡眠' – UKMonkey

+1

我不認爲問題很糟糕,但它實際上包含兩個。 –

+0

@HannesHauptmann它也一直在變化 – UKMonkey

回答

2

與流行觀點相反,創建線程並不是那麼昂貴。儘管我沒有Windows機器來測試,但我會想象現代Windows系統上的線程創建時間在單個微秒內(如在Linux上)。

所以,如果你的設計變成了短命的線程場景更加簡單,並且線程不必背景下持續下去,並在任何給定的時間,你只有一個工作線程,他們開始不經常(比如說,每10秒鐘或更長時間)我沒有特別的理由想要讓線程消息排隊。

+0

考慮到這個問題表明它將按鍵完成,斷言「一個工作線程」和「不經常啓動」是錯誤的。 – UKMonkey

+0

@UKMonkey,你輸入多快? :D – SergeyA

+3

用我的手或腳? :P – UKMonkey

相關問題