0

cpp コードを Objective C に移植しています。このプログラミングは初めてです。

このスレッドがtimeoutThread.と呼ばれる関数を呼び出しているスレッドを開始する必要があり、insert()と呼ばれる1つの関数でsetEvent(m_Thread)でイベントを設定し、関数timeoutThreadでwaitforsingleobject(m_thread、遅延)とwaitforsingleObjectのすぐ上で、setEvent(m_ThreadEvent)によって別のイベントを設定し、タイムアウトスレッド関数内で他のスタッフを実行しています。私は NSOperationQueue を作成し、initWithTarget:toTarget:object で関数を呼び出しました。しかし、Objective C の cpp で行っているのと同じように、イベントを設定して通知するにはどうすればよいですか?

これに関する簡単な例での説明は、私のような初心者にとって非常に役立ちます。

4

1 に答える 1

1

これらのことを行うWindowsの方法に完全に取り組んでいるわけではないことは認めますが、単一のフラグのみを待機している場合に必要なプリミティブはNSConditionLockです。各条件ロックには特定の条件があり、スレッドは条件に関係なく、または特定の条件がある場合にのみロックを試行でき、オプションで両方のタイムアウトを使用できます。その後、ロックを解除し、必要に応じて新しい条件を設定できます。

おそらく、操作を NSOperationQueue にオフロードするのではなく、NSThreads を手動で作成する方が簡単な方法です。各 NSThread には自動的に NSRunloop があるため、次のようなセマンティクスを使用できます。

[object performSelector:@selector(operation:) onThread:targetThread withObject:someArgumentForOperation waitUntilDone:NO];

この場合、メソッド 'operation:' は、機会が生じるとすぐに指名されたスレッドで指名された引数で呼び出され、呼び出し元のスレッドはブロックされません。Runloops は従来の win32 メッセージ ディスパッチ メカニズムと同じ問題を解決しますが、責任を逆にします。Cocoa はブロック スレッドを処理し、メッセージをウェイクアップし、適切な関数呼び出しを発行します。

于 2011-05-25T15:22:44.460 に答える