Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Cocoa:中断主线程以检查新的键事件?_Objective C_Multithreading_Cocoa - Fatal编程技术网

Objective c Cocoa:中断主线程以检查新的键事件?

Objective c Cocoa:中断主线程以检查新的键事件?,objective-c,multithreading,cocoa,Objective C,Multithreading,Cocoa,我有一个带有搜索字段的基本Cocoa应用程序。当用户键入第一个字母时,将启动一个可能需要一段时间的搜索 用户键入第二个字母后,应立即取消第一次搜索,并使用新的搜索字符串开始搜索 搜索本身必须发生在主线程上 有没有办法定期“暂停”主线程上运行的搜索任务,并让主线程处理任何挂起的关键事件 我尝试添加以下内容,但效果不太好。光标会闪烁,但键入的新字母不会显示 let untilDate = NSDate(timeIntervalSinceNow: 0.25) while NSRunLoop.curre

我有一个带有搜索字段的基本Cocoa应用程序。当用户键入第一个字母时,将启动一个可能需要一段时间的搜索

用户键入第二个字母后,应立即取消第一次搜索,并使用新的搜索字符串开始搜索

搜索本身必须发生在主线程上

有没有办法定期“暂停”主线程上运行的搜索任务,并让主线程处理任何挂起的关键事件

我尝试添加以下内容,但效果不太好。光标会闪烁,但键入的新字母不会显示

let untilDate = NSDate(timeIntervalSinceNow: 0.25)
while NSRunLoop.currentRunLoop().runMode(NSEventTrackingRunLoopMode, beforeDate: untilDate)
{
    print("did process")
}

PS:另一种解决方案是在第一个字母后再搜索一小段时间,看看用户是否会输入更多。但是,如果有一种方法可以完成上述任务,搜索将更快完成。

为什么需要在主线程上进行搜索?如果这需要时间,就不应该在主线程上执行!是的,我知道。但是搜索是在访问UI元素,而且必须在主线程上完成,很遗憾,那么你的方法肯定是非常失败的,我很抱歉。您应该将数据和UI元素分开。手动处理主运行循环是个坏主意,它只会导致更多问题和低性能应用程序。我正在遍历UI元素树,这些元素只能从主线程访问。我只是想知道是否有这样一种方法,即在让主线程进程排队等待事件时暂停执行。