【发布时间】:2017-08-04 13:15:10
【问题描述】:
如果我们创建一个寿命短的线程(200 毫秒到 1 秒)来在文本框字段中的每次按键上执行搜索任务,是否有缺点? p>
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); 在内部?)。
注意:我还实现了一个“去抖动”功能,以避免每次按键都进行多次搜索,但这不在此处讨论。
【问题讨论】:
-
你要做的是查找conditions这将让你有一个没有“睡眠”的单线程
-
我不认为这个问题不好,但它实际上包含两个。
-
@HannesHauptmann 它也在不断变化
-
在整个作品中(无论用户键入多快)可能会引发扳手的是所创建线程的非确定性执行顺序。在按键时间 t+1 之前查找按键时间 t+5 可能(或可能不)可以。如果有来自消息队列的 UI 反馈取决于按键,用户可能会觉得有点令人不安。当然取决于用例
-
不过,我的观点仍然是,创建线程的成本相对较高,而且工作时间短且工作量不大的线程并不划算。
标签: c++ windows multithreading winapi