1c7fc39b6c
in almost all methods removed timeouts in milliseconds, replaced to PISystemTime PITimer rewrite, remove internal impl, now only thread implementation, API similar to PIThread PITimer API no longer pass void* PIPeer, PIConnection improved stability on reinit and exit PISystemTime new methods pisd now exit without hanging
81 lines
2.0 KiB
C++
81 lines
2.0 KiB
C++
/*
|
|
PIP - Platform Independent Primitives
|
|
Introspection module - implementation of threads
|
|
Ivan Pelipenko peri4ko@yandex.ru
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Lesser General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "piintrospection_threads_p.h"
|
|
|
|
|
|
PIIntrospectionThreads::ThreadInfo::ThreadInfo() {
|
|
id = delay = 0;
|
|
state = sStopped;
|
|
priority = 0;
|
|
run_us = run_count = 0U;
|
|
}
|
|
|
|
|
|
PIIntrospectionThreads::PIIntrospectionThreads() {}
|
|
|
|
|
|
void PIIntrospectionThreads::threadNew(PIThread * t) {
|
|
PIMutexLocker _ml(mutex);
|
|
threads.insert(t, ThreadInfo());
|
|
}
|
|
|
|
|
|
void PIIntrospectionThreads::threadDelete(PIThread * t) {
|
|
PIMutexLocker _ml(mutex);
|
|
threads.remove(t);
|
|
}
|
|
|
|
|
|
void PIIntrospectionThreads::threadStart(PIThread * t) {
|
|
PIMutexLocker _ml(mutex);
|
|
ThreadInfo & ti(threads[t]);
|
|
ti.id = t->tid();
|
|
ti.priority = t->priority();
|
|
ti.delay = t->delay_.toMilliseconds();
|
|
ti.state = sStarting;
|
|
}
|
|
|
|
|
|
void PIIntrospectionThreads::threadRun(PIThread * t) {
|
|
PIMutexLocker _ml(mutex);
|
|
ThreadInfo & ti(threads[t]);
|
|
ti.state = sRunning;
|
|
ti.run_count++;
|
|
}
|
|
|
|
|
|
void PIIntrospectionThreads::threadWait(PIThread * t) {
|
|
PIMutexLocker _ml(mutex);
|
|
threads[t].state = sWaiting;
|
|
}
|
|
|
|
|
|
void PIIntrospectionThreads::threadStop(PIThread * t) {
|
|
PIMutexLocker _ml(mutex);
|
|
threads[t].state = sStopped;
|
|
}
|
|
|
|
|
|
void PIIntrospectionThreads::threadRunDone(PIThread * t, ullong us) {
|
|
PIMutexLocker _ml(mutex);
|
|
ThreadInfo & ti(threads[t]);
|
|
ti.run_us = (ti.run_us * 0.8) + (us * 0.2); /// WARNING
|
|
}
|