OSX用のココアアプリケーションに次のコードがあります。
void *callbackInfo = NULL; // could put stream-specific data here.
FSEventStreamRef stream;
CFAbsoluteTime latency = 1.0; /* Latency in seconds */
/* Create the stream, passing in a callback */
stream = FSEventStreamCreate(NULL,
&mycallback,
callbackInfo,
pathsToWatch,
kFSEventStreamEventIdSinceNow, /* Or a previous event ID */
latency,
kFSEventStreamCreateFlagFileEvents//kFSEventStreamCreateFlagNone /* Flags explained in reference */
);
/* Create the stream before calling this. */
FSEventStreamScheduleWithRunLoop(stream, CFRunLoopGetCurrent(),kCFRunLoopDefaultMode);
FSEventStreamStart(stream);
CFRunLoopRun();
}
このコードは、ファイル システムの変更について通知され、それに応じて反応します (コールバック関数はスニペットにありません)。
私の問題は、 CFRunLoopRun() がブロックされていることです。つまり、コードのそれ以上の実行は停止します。ただし、ファイルシステムの変更の監視を開始できる可能性を探していますが、それを停止することもできます (たとえば、別のオブジェクトから)。
私が考えた 1 つのオプションは、ループを 1 秒間だけ開始し、その後グローバル変数をチェックすることです。しかし、私は通常、グローバル変数が好きではありません....
これを解決する方法を教えてください。オーバーヘッドを購入して、実行を別のスレッドに入れるのは良い考えでしょうか?
前もって感謝します!ノーバート