aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/basetypes/MCOperationQueue.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/basetypes/MCOperationQueue.cc')
-rw-r--r--src/core/basetypes/MCOperationQueue.cc23
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