瀏覽代碼

Use the hight precision timer in the event admin plugin.

Sascha Zelzer 12 年之前
父節點
當前提交
6a752b1f96

+ 6 - 2
Libs/PluginFramework/Testing/org.commontk.eventadmintest/CMakeLists.txt

@@ -27,15 +27,19 @@ set(PLUGIN_MOC_SRCS
 )
 
 set(PLUGIN_UI_FORMS
-  
+
 )
 
 set(PLUGIN_resources
-  
+
 )
 
 ctkFunctionGetTargetLibraries(PLUGIN_target_libraries)
 
+if(UNIX)
+  list(APPEND PLUGIN_target_libraries rt)
+endif()
+
 ctkMacroBuildPlugin(
   NAME ${PROJECT_NAME}
   EXPORT_DIRECTIVE ${PLUGIN_export_directive}

+ 4 - 0
Plugins/org.commontk.eventadmin/CMakeLists.txt

@@ -114,6 +114,10 @@ set(PLUGIN_CACHED_RESOURCEFILES
 
 ctkFunctionGetTargetLibraries(PLUGIN_target_libraries)
 
+if(UNIX)
+  list(APPEND PLUGIN_target_libraries rt)
+endif()
+
 ctkMacroBuildPlugin(
   EXPORT_DIRECTIVE ${PLUGIN_export_directive}
   SRCS ${PLUGIN_SRCS}

+ 4 - 9
Plugins/org.commontk.eventadmin/dispatch/ctkEALinkedQueue.cpp

@@ -25,10 +25,7 @@
 #include "ctkEAInterruptibleThread_p.h"
 #include "ctkEAInterruptedException_p.h"
 
-// for ctk::msecsTo() - remove after switching to Qt 4.7
-#include <ctkUtils.h>
-
-#include <QDateTime>
+#include <ctkHighPrecisionTimer.h>
 
 
 ctkEALinkedQueue::ctkEALinkedQueue()
@@ -125,9 +122,8 @@ ctkEARunnable* ctkEALinkedQueue::poll(long msecs)
     QMutexLocker l(&putLock_);
     try {
       qint64 waitTime = static_cast<qint64>(msecs);
-      //TODO Use Qt4.7 API
-      //long start = (msecs <= 0)? 0 : System.currentTimeMillis();
-      QDateTime start = QDateTime::currentDateTime();
+      ctkHighPrecisionTimer t;
+      t.start();
       ++waitingForTake_;
       forever
       {
@@ -140,8 +136,7 @@ ctkEARunnable* ctkEALinkedQueue::poll(long msecs)
         else
         {
           ctkEAInterruptibleThread::currentThread()->wait(&putLock_, &putLockWait_, waitTime);
-          //waitTime = msecs - (System.currentTimeMillis() - start);
-          waitTime = static_cast<qint64>(msecs) - ctk::msecsTo(start, QDateTime::currentDateTime());
+          waitTime = static_cast<qint64>(msecs) - t.elapsedMilli();
         }
       }
     }

+ 6 - 9
Plugins/org.commontk.eventadmin/util/ctkEACyclicBarrier.cpp

@@ -22,10 +22,6 @@
 
 #include "ctkEACyclicBarrier_p.h"
 
-// for ctk::msecsTo() - remove after switching to Qt 4.7
-#include <ctkUtils.h>
-
-#include <QDateTime>
 #include <QRunnable>
 #include <QDebug>
 
@@ -35,6 +31,8 @@
 #include "ctkEATimeoutException_p.h"
 #include "ctkEABrokenBarrierException_p.h"
 
+#include "ctkHighPrecisionTimer.h"
+
 ctkEACyclicBarrier::ctkEACyclicBarrier(int parties, ctkEARunnable* command)
   : parties_(parties), broken_(false), barrierCommand_(command),
     count_(parties), resets_(0)
@@ -90,7 +88,7 @@ int ctkEACyclicBarrier::doBarrier(bool timed, long msecs)
 
   ctkEAInterruptibleThread* currThread = ctkEAInterruptibleThread::currentThread();
   Q_ASSERT(currThread != 0); // ctkEACyclicBarrier can only be used with ctkEAInterruptibleThread
-  
+
   if (broken_)
   {
     throw ctkEABrokenBarrierException(index);
@@ -131,7 +129,8 @@ int ctkEACyclicBarrier::doBarrier(bool timed, long msecs)
   else
   { // wait until next reset
     int r = resets_;
-    QDateTime startTime = QDateTime::currentDateTime();
+    ctkHighPrecisionTimer t;
+    t.start();
     qint64 waitTime = static_cast<qint64>(msecs);
     forever
     {
@@ -165,9 +164,7 @@ int ctkEACyclicBarrier::doBarrier(bool timed, long msecs)
       }
       else if (timed)
       {
-        //TODO use Qt 4.7 API
-        //waitTime = msecs - QDateTime::toMSecs(startTime);
-        waitTime = static_cast<qint64>(msecs) - ctk::msecsTo(startTime, QDateTime::currentDateTime());
+        waitTime = static_cast<qint64>(msecs) - t.elapsedMilli();
         if  (waitTime <= 0)
         {
           broken_ = true;