目标C中的NSOperationQueues

时间:2011-06-01 14:22:38

标签: objective-c

我是编程新手。我正在将cpp(WIN32)移植到cocoa框架。我有一个名为start(process)的方法,从中调用2个方法。我想平行进行操作。我想进行InterThread通信。

这可以通过performSelectorOnMainThread:withObject:waitUntilDone来完成。

这里我需要先调用第二个线程,第一个线程调用第二个。第二个线程等待第一个线程的信号。(例如:第一个线程添加两个不用,第二个线程执行显示和其他一些操作)

[receiverobj performSelectorOnMainThread:withObject:waitUntilDone] 

是执行它的语法。但它们都是同一个类的实例方法。第一个线程返回类型是void值,第二个线程返回值是uint8_t。如何从第一个线程接收信号到第一个线程之前已开始执行的第二个线程。

1 个答案:

答案 0 :(得分:1)

关于Cocoa的第一件事是所有显示代码都应该在主线程上运行。因此,如果您正在询问如何让主线程知道它需要进行一些显示工作,performSelectorOnMainThread:waitUntilDone:是正确的答案。此方法通过在主线程的运行循环(处理来自UI和定时器等的事件的循环)中放置一个人为的“事件”来工作。接收器将调用该方法,就像您直接调用它一样,但它将在主线程上发生。

如果您想要通知另一个显示工作已完成的线程,您可以像这样同步执行:

[receiver performSelectorOnMainThread: @selector(mySelector) withObject: nil waitUntilDone: YES];

调用线程将暂停,直到方法完成。

如果你只想开火并忘记它

[receiver performSelectorOnMainThread: @selector(mySelector) withObject: nil waitUntilDone: NO];

该模式适用于任何使用方法performSelectorOnThread:withObject:waitUntilDone:的线程。但是,如果执行此操作,则必须确保目标线程正在执行run loop