diff options
Diffstat (limited to 'src/core/basetypes/MCOperationQueue.cc')
-rw-r--r-- | src/core/basetypes/MCOperationQueue.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/core/basetypes/MCOperationQueue.cc b/src/core/basetypes/MCOperationQueue.cc index 50b2416c..76a76bc7 100644 --- a/src/core/basetypes/MCOperationQueue.cc +++ b/src/core/basetypes/MCOperationQueue.cc @@ -25,6 +25,9 @@ OperationQueue::OperationQueue() mWaitingFinishedSem = mailsem_new(); mQuitting = false; mCallback = NULL; +#if __APPLE__ + mDispatchQueue = dispatch_get_main_queue(); +#endif } OperationQueue::~OperationQueue() @@ -78,7 +81,11 @@ void OperationQueue::runOperations() mailsem_up(mStopSem); retain(); // (2) +#if __APPLE__ + performMethodOnDispatchQueue((Object::Method) &OperationQueue::stoppedOnMainThread, NULL, mDispatchQueue, true); +#else performMethodOnMainThread((Object::Method) &OperationQueue::stoppedOnMainThread, NULL, true); +#endif pool->release(); break; @@ -107,7 +114,11 @@ void OperationQueue::runOperations() if (needsCheckRunning) { retain(); // (1) MCLog("check running %p", this); +#if __APPLE__ + performMethodOnDispatchQueue((Object::Method) &OperationQueue::checkRunningOnMainThread, this, mDispatchQueue); +#else performMethodOnMainThread((Object::Method) &OperationQueue::checkRunningOnMainThread, this); +#endif } pool->release(); @@ -239,3 +250,15 @@ void OperationQueue::waitUntilAllOperationsAreFinished() mWaiting = false; } #endif + +#if __APPLE__ +void OperationQueue::setDispatchQueue(dispatch_queue_t dispatchQueue) +{ + mDispatchQueue = dispatchQueue; +} + +dispatch_queue_t OperationQueue::dispatchQueue() +{ + return mDispatchQueue; +} +#endif |