/* 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 . */ #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_; 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 }