aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-08-05 16:40:50 -0700
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-08-05 16:40:50 -0700
commit4970546ecec70e89e2baece66eccfd350c499050 (patch)
tree5e30fde0455b9b6b50e79524c0279dc1abdc1b9d
parentbecd63c496705796ae3f8d9fb5bf277a460a6ea3 (diff)
Internal callbacks for ops, before and after running.
-rw-r--r--src/core/basetypes/MCOperation.cc8
-rw-r--r--src/core/basetypes/MCOperation.h8
-rw-r--r--src/core/basetypes/MCOperationQueue.cc13
-rw-r--r--src/core/basetypes/MCOperationQueue.h1
4 files changed, 26 insertions, 4 deletions
diff --git a/src/core/basetypes/MCOperation.cc b/src/core/basetypes/MCOperation.cc
index d42a0598..73a8d7cd 100644
--- a/src/core/basetypes/MCOperation.cc
+++ b/src/core/basetypes/MCOperation.cc
@@ -40,10 +40,18 @@ bool Operation::isCancelled()
return value;
}
+void Operation::beforeMain()
+{
+}
+
void Operation::main()
{
}
+void Operation::afterMain()
+{
+}
+
void Operation::start()
{
}
diff --git a/src/core/basetypes/MCOperation.h b/src/core/basetypes/MCOperation.h
index 71d0b465..bb77dbb1 100644
--- a/src/core/basetypes/MCOperation.h
+++ b/src/core/basetypes/MCOperation.h
@@ -18,11 +18,17 @@ namespace mailcore {
virtual void setCallback(OperationCallback * callback);
virtual OperationCallback * callback();
-
+
virtual void cancel();
virtual bool isCancelled();
+ // Will be called on main thread.
+ virtual void beforeMain();
+
virtual void main();
+
+ // Will be called on main thread.
+ virtual void afterMain();
virtual void start();
diff --git a/src/core/basetypes/MCOperationQueue.cc b/src/core/basetypes/MCOperationQueue.cc
index 9c30ad22..c20cb907 100644
--- a/src/core/basetypes/MCOperationQueue.cc
+++ b/src/core/basetypes/MCOperationQueue.cc
@@ -84,6 +84,8 @@ void OperationQueue::runOperations()
break;
}
+ performMethodOnMainThread((Object::Method) &OperationQueue::beforeMain, op, true);
+
op->main();
op->retain()->autorelease();
@@ -99,9 +101,7 @@ void OperationQueue::runOperations()
pthread_mutex_unlock(&mLock);
if (!op->isCancelled()) {
- if (op->callback() != NULL) {
- performMethodOnMainThread((Object::Method) &OperationQueue::callbackOnMainThread, op, true);
- }
+ performMethodOnMainThread((Object::Method) &OperationQueue::callbackOnMainThread, op, true);
}
if (needsCheckRunning) {
@@ -115,8 +115,15 @@ void OperationQueue::runOperations()
MCLog("cleanup thread %p", this);
}
+void OperationQueue::beforeMain(Operation * op)
+{
+ op->beforeMain();
+}
+
void OperationQueue::callbackOnMainThread(Operation * op)
{
+ op->afterMain();
+
if (op->isCancelled())
return;
diff --git a/src/core/basetypes/MCOperationQueue.h b/src/core/basetypes/MCOperationQueue.h
index ddfe9de2..0518d62f 100644
--- a/src/core/basetypes/MCOperationQueue.h
+++ b/src/core/basetypes/MCOperationQueue.h
@@ -43,6 +43,7 @@ namespace mailcore {
void startThread();
static void runOperationsOnThread(OperationQueue * queue);
void runOperations();
+ void beforeMain(Operation * op);
void callbackOnMainThread(Operation * op);
void checkRunningOnMainThread(void * context);
void checkRunningAfterDelay(void * context);