ソケットからのリクエストをリッスンするには、バックグラウンドで追加のスレッドが必要です。
コードはシングルトン クラスに配置されます。次のように NSApplicationMain() の前に main.m で呼び出されます。
[[SKSocketThread getSingleton] runThread];
また、runThread は次のように定義されます。
- (void) runThread {
[NSThread detachNewThreadSelector:@selector(socketThreadMainLoop:)
toTarget:self
withObject:[self quitLock]];
}
- (void) socketThreadMainLoop:(id)param {
NSLock *lock = (NSLock *)param;
while (![lock tryLock]) {
NSLog(@"Yay! We are in socketThreadMainLoop now!");
[NSThread sleepForTimeInterval:2];
}
NSLog(@"Terminating the socket thread...");
[lock unlock]; // is it really necessary?
}
警告なしで正常にコンパイルされますが、実行時にエラーがスローされます。
autoreleased with no pool in place.
私はいくつかのグーグルを行い、@autoreleasepool を使用して runThread と socketThreadMainLoop にコードをパックしようとしましたが、エラーはまだ残っています。最後に、runThread への呼び出しを main.m でラップしたところ、うまくいきました。
なぜこの方法でしか機能しないのかわかりません...