PIObject::deleteLater important fix
PIWaitEvent::sleep() method PITimer thread imp wait optimization, migrate to interruptable sleeps
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
|
||||
#include "pitimer.h"
|
||||
#include "piincludes_p.h"
|
||||
#include "piwaitevent_p.h"
|
||||
#ifdef PIP_TIMER_RT
|
||||
# include <csignal>
|
||||
#endif
|
||||
@@ -190,6 +191,7 @@ private:
|
||||
|
||||
PIThread thread_;
|
||||
PISystemTime st_time, st_inc, st_wait, st_odt;
|
||||
PIWaitEvent event;
|
||||
};
|
||||
|
||||
|
||||
@@ -235,9 +237,10 @@ private:
|
||||
|
||||
_PITimerImp_Thread::_PITimerImp_Thread() {
|
||||
thread_.setName("__S__PITimerImp_Thread::thread");
|
||||
wait_dt = 100;
|
||||
wait_dd = 200;
|
||||
wait_tick = 10;
|
||||
wait_dt = 1000;
|
||||
wait_dd = 2000;
|
||||
wait_tick = 1000;
|
||||
event.create();
|
||||
//piCout << "_PITimerImp_Thread" << this << ", thread& =" << &thread_;
|
||||
//piCout << "new _PITimerImp_Thread";
|
||||
}
|
||||
@@ -245,6 +248,7 @@ _PITimerImp_Thread::_PITimerImp_Thread() {
|
||||
|
||||
_PITimerImp_Thread::~_PITimerImp_Thread() {
|
||||
stop(true);
|
||||
event.destroy();
|
||||
}
|
||||
|
||||
|
||||
@@ -275,6 +279,7 @@ bool _PITimerImp_Thread::startTimer(double interval_ms) {
|
||||
|
||||
bool _PITimerImp_Thread::stopTimer(bool wait) {
|
||||
thread_.stop();
|
||||
event.interrupt();
|
||||
if (wait) return thread_.waitForFinish();
|
||||
// if (wait)
|
||||
// if (!thread_.waitForFinish(10))
|
||||
@@ -296,10 +301,12 @@ bool _PITimerImp_Thread::threadFunc() {
|
||||
dwt = st_time - PISystemTime::current(true);
|
||||
if (wth > 0) {
|
||||
if (dwt.toMilliseconds() > wth + 1.) {
|
||||
piMSleep(wth);
|
||||
event.sleep(wth * 1000);
|
||||
if (thread_.isStopping()) return false;
|
||||
return false;
|
||||
} else {
|
||||
dwt.sleep();
|
||||
event.sleep(dwt.toMicroseconds());
|
||||
if (thread_.isStopping()) return false;
|
||||
deferred_ = false;
|
||||
st_time = PISystemTime::current(true);
|
||||
}
|
||||
@@ -319,10 +326,12 @@ bool _PITimerImp_Thread::threadFunc() {
|
||||
if (wait_tick > 0) {
|
||||
if (st_wait.toMilliseconds() > wait_tick + 1.) {
|
||||
piMSleep(wait_tick);
|
||||
if (thread_.isStopping()) return false;
|
||||
return false;
|
||||
} else {
|
||||
//piCout << &thread_ << "sleep for" << st_wait;
|
||||
st_wait.sleep();
|
||||
event.sleep(st_wait.toMicroseconds());
|
||||
if (thread_.isStopping()) return false;
|
||||
}
|
||||
} else {
|
||||
if (st_wait.toMilliseconds() > 0.1)
|
||||
|
||||
Reference in New Issue
Block a user