我将cpp代码移植到Objective C. 我是这个节目的新手。
我必须启动一个线程,这个线程正在调用一个名为timeoutThread的函数,并在一个名为insert()的函数中使用setEvent(m_Thread)设置一个事件,在函数timeoutThread中,他们通过调用waitforsingleobject来等待事件。 (m_thread,delay)。并且在waitforsingleObject的正上方,他们通过setEvent(m_ThreadEvent)设置另一个事件。并在超时线程函数中执行其他操作。 我创建了一个NSOperationQueue并使用initWithTarget调用该函数:toTarget:object.But我如何设置事件并通知它们在Objective C中的cpp中所做的相同。
通过一个简单的例子对此进行任何解释对于像我这样的初学者来说非常有用。
答案 0 :(得分:1)
我承认不是完全依赖Windows做这些事情的方式,但我想如果你只等待单个标志就是NSConditionLock。每个条件锁具有特定条件,线程可以尝试锁定它而不考虑条件或仅在具有特定条件时,可选地对两者都超时。然后,他们可以解锁,并可选择在他们这样做时设置新条件。
可能更简单的方法是手动创建NSThreads,而不是仅将操作卸载到NSOperationQueue中。每个NSThread都自动拥有一个NSRunloop,因此您可以使用如下语义:
[object performSelector:@selector(operation:) onThread:targetThread withObject:someArgumentForOperation waitUntilDone:NO];
在这种情况下,只要有机会,就会在指定的线程上使用指定的参数调用方法'operation:',并且不阻止调用线程。 Runloops解决了与经典的win32消息调度机制相同的问题,但是反过来责任 - Cocoa处理阻塞线程,唤醒消息并发出适当的函数调用。