Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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

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
Cocoa 通知和多线程_Cocoa_Multithreading_Nsnotifications_Nstask - Fatal编程技术网

Cocoa 通知和多线程

Cocoa 通知和多线程,cocoa,multithreading,nsnotifications,nstask,Cocoa,Multithreading,Nsnotifications,Nstask,我正在尝试在我的多线程应用程序中获取通知nstaskdidterminatenofication,但无法使其工作。当我在一个单线程应用程序上测试它时,它似乎确实有效。在init中,我有[[NSNotificationCenter defaultCenter]addObserver:self-selector:@selector(taskDidEnd:)name:nstaskdidterminatentification对象:myTask]

我正在尝试在我的多线程应用程序中获取通知
nstaskdidterminatenofication
,但无法使其工作。当我在一个单线程应用程序上测试它时,它似乎确实有效。在
init
中,我有
[[NSNotificationCenter defaultCenter]addObserver:self-selector:@selector(taskDidEnd:)name:nstaskdidterminatentification对象:myTask]taskDidEnd:
方法定义为

- (void)taskDidEnd: (NSNotification *)aNotification
{
     NSLog(@"Task succeeded.");
}
在dealoc中,观察者被移除


这一切都发生在一个在单独线程内启动的对象中,我希望在同一个对象内收到该通知。

您是否在该线程上运行了运行循环?如果没有,NSTask将不会注意到任务已结束(或任务尚未结束),也不会发布通知。

我已尝试从init中运行[[nsrunlop currentlunloop]run],但这似乎没有帮助。我使用它的方式是否错误?第二个线程中的对象(我在detachNewThreadSelector:toTarget:withObject:中指定的对象)在发送消息后是否初始化了该对象?这毫无意义。如果希望在该线程上接收通知,则需要在该线程上同时运行任务和运行循环。顺便问一下,在该线程上执行此操作是否有原因?任务(进程)已经倾向于在其他处理器上调度,而运行循环自然地处理不经常发生的离散事件,如NSTask finishing。在搜索了很长时间后,我发现NSTask不是没有响应,而是其他一些。这让我摆脱了线程。谢谢你问我为什么需要一个,否则我就不会发现问题了。