OSDN Git Service

Now using a QSemaphore to make the observer threads sleep. This allows waking up...
authorlordmulder <mulder2@gmx.de>
Fri, 25 Nov 2011 00:01:30 +0000 (01:01 +0100)
committerlordmulder <mulder2@gmx.de>
Fri, 25 Nov 2011 00:01:30 +0000 (01:01 +0100)
src/Config.h
src/Thread_CPUObserver.cpp
src/Thread_CPUObserver.h
src/Thread_DiskObserver.cpp
src/Thread_DiskObserver.h
src/Thread_RAMObserver.cpp
src/Thread_RAMObserver.h

index 79b8482..7d663ce 100644 (file)
@@ -30,7 +30,7 @@
 #define VER_LAMEXP_MINOR_LO                                    4
 #define VER_LAMEXP_TYPE                                                Alpha
 #define VER_LAMEXP_PATCH                                       3
-#define VER_LAMEXP_BUILD                                       786
+#define VER_LAMEXP_BUILD                                       787
 
 ///////////////////////////////////////////////////////////////////////////////
 // Tool versions (minimum expected versions!)
index 4bb9567..a2a5edb 100644 (file)
@@ -33,7 +33,6 @@ typedef BOOL (WINAPI *GetSystemTimesPtr)(LPFILETIME lpIdleTime, LPFILETIME lpKer
 
 CPUObserverThread::CPUObserverThread(void)
 {
-       m_terminated = false;
 }
 
 CPUObserverThread::~CPUObserverThread(void)
@@ -47,7 +46,6 @@ CPUObserverThread::~CPUObserverThread(void)
 void CPUObserverThread::run(void)
 {
        qDebug("CPU observer started!");
-       m_terminated = false;
 
        try
        {
@@ -61,6 +59,8 @@ void CPUObserverThread::run(void)
                FatalAppExit(0, L"Unhandeled exception error, application will exit!");
                TerminateProcess(GetCurrentProcess(), -1);
        }
+
+       while(m_semaphore.available()) m_semaphore.tryAcquire();
 }
 
 ULONGLONG CPUObserverThread::filetime2ulonglong(const void *ftime)
@@ -94,7 +94,7 @@ void CPUObserverThread::observe(void)
                        sys[i] = 0; usr[i] = 0; idl[i] = 0;
                }
 
-               while(!m_terminated)
+               forever
                {
                        if(getSystemTimes(&idlTime, &sysTime, &usrTime))
                        {
@@ -127,10 +127,7 @@ void CPUObserverThread::observe(void)
                                        }
                                }
                        }
-                       for(int i = 0; i < 6; i++)
-                       {
-                               if(!m_terminated) msleep(333);
-                       }
+                       if(m_semaphore.tryAcquire(1, 2000)) break;
                }
        }
        else
index dda416e..e656b2b 100644 (file)
@@ -22,6 +22,7 @@
 #pragma once
 
 #include <QThread>
+#include <QSemaphore>
 
 class CPUObserverThread: public QThread
 {
@@ -31,7 +32,7 @@ public:
        CPUObserverThread(void);
        ~CPUObserverThread(void);
 
-       void stop(void) { m_terminated = true; }
+       void stop(void) { m_semaphore.release(); }
        
 protected:
        void run(void);
@@ -41,6 +42,6 @@ signals:
        void currentUsageChanged(const double usage);
 
 private:
-       volatile bool m_terminated;
+       QSemaphore m_semaphore;
        static inline unsigned __int64 filetime2ulonglong(const void *ftime);
 };
index d511332..266f666 100644 (file)
@@ -35,7 +35,6 @@ DiskObserverThread::DiskObserverThread(const QString &path)
 :
        m_path(makeRootDir(path))
 {
-       m_terminated = false;
 }
 
 DiskObserverThread::~DiskObserverThread(void)
@@ -49,7 +48,6 @@ DiskObserverThread::~DiskObserverThread(void)
 void DiskObserverThread::run(void)
 {
        qDebug("DiskSpace observer started!");
-       m_terminated = false;
 
        try
        {
@@ -63,6 +61,8 @@ void DiskObserverThread::run(void)
                FatalAppExit(0, L"Unhandeled exception error, application will exit!");
                TerminateProcess(GetCurrentProcess(), -1);
        }
+
+       while(m_semaphore.available()) m_semaphore.tryAcquire();
 }
 
 void DiskObserverThread::observe(void)
@@ -71,7 +71,7 @@ void DiskObserverThread::observe(void)
        unsigned __int64 freeSpace, previousSpace = 0ui64;
        bool ok = false;
 
-       while(!m_terminated)
+       forever
        {
                freeSpace = lamexp_free_diskspace(m_path, &ok);
                if(ok)
@@ -88,10 +88,7 @@ void DiskObserverThread::observe(void)
                                previousSpace = freeSpace;
                        }
                }
-               for(int i = 0; i < 6; i++)
-               {
-                       if(!m_terminated) msleep(333);
-               }
+               if(m_semaphore.tryAcquire(1, 2000)) break;
        }
 }
 
index 1bf4a0c..f7ffb01 100644 (file)
@@ -22,6 +22,7 @@
 #pragma once
 
 #include <QThread>
+#include <QSemaphore>
 
 class DiskObserverThread: public QThread
 {
@@ -31,7 +32,7 @@ public:
        DiskObserverThread(const QString &path);
        ~DiskObserverThread(void);
 
-       void stop(void) { m_terminated = true; }
+       void stop(void) { m_semaphore.release(); }
        
 protected:
        void run(void);
@@ -44,6 +45,6 @@ signals:
        void freeSpaceChanged(const quint64);
 
 private:
-       volatile bool m_terminated;
+       QSemaphore m_semaphore;
        const QString m_path;
 };
index 44ad40a..b9fc468 100644 (file)
@@ -30,7 +30,6 @@
 
 RAMObserverThread::RAMObserverThread(void)
 {
-       m_terminated = false;
 }
 
 RAMObserverThread::~RAMObserverThread(void)
@@ -44,7 +43,6 @@ RAMObserverThread::~RAMObserverThread(void)
 void RAMObserverThread::run(void)
 {
        qDebug("RAM observer started!");
-       m_terminated = false;
 
        try
        {
@@ -58,6 +56,8 @@ void RAMObserverThread::run(void)
                FatalAppExit(0, L"Unhandeled exception error, application will exit!");
                TerminateProcess(GetCurrentProcess(), -1);
        }
+
+       while(m_semaphore.available()) m_semaphore.tryAcquire();
 }
 
 void RAMObserverThread::observe(void)
@@ -65,7 +65,7 @@ void RAMObserverThread::observe(void)
        MEMORYSTATUSEX memoryStatus;
        double previous = -1.0;
 
-       while(!m_terminated)
+       forever
        {
                memset(&memoryStatus, 0, sizeof(MEMORYSTATUSEX));
                memoryStatus.dwLength = sizeof(MEMORYSTATUSEX);
@@ -79,10 +79,7 @@ void RAMObserverThread::observe(void)
                                previous = current;
                        }
                }
-               for(int i = 0; i < 6; i++)
-               {
-                       if(!m_terminated) msleep(333);
-               }
+               if(m_semaphore.tryAcquire(1, 2000)) break;
        }
 }
 
index 06585f2..c472397 100644 (file)
@@ -22,6 +22,7 @@
 #pragma once
 
 #include <QThread>
+#include <QSemaphore>
 
 class RAMObserverThread: public QThread
 {
@@ -31,7 +32,7 @@ public:
        RAMObserverThread(void);
        ~RAMObserverThread(void);
 
-       void stop(void) { m_terminated = true; }
+       void stop(void) { m_semaphore.release(); }
        
 protected:
        void run(void);
@@ -41,5 +42,5 @@ signals:
        void currentUsageChanged(const double usage);
 
 private:
-       volatile bool m_terminated;
+       QSemaphore m_semaphore;
 };