1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #include "precomp.h"
- #include "timeslicer.h"
- #define TIMER_SLICE 0x7816
- TimeSlicer::TimeSlicer(int percent_cpu_usage/* =50 */, int slice_duration/* =-1 */) {
- max_cpu_usage = MIN((float)percent_cpu_usage, 99.0f) / 100.0f;
- duration = slice_duration;
- started = 0;
- slicecount = 0;
- firstslicetime = -1;
- }
- TimeSlicer::~TimeSlicer() {
- }
- void TimeSlicer::startSlicer() {
- if (started) return;
- started = 1;
- timerclient_setTimer(TIMER_SLICE, duration);
- onSlicerStart();
- timerclient_timerCallback(TIMER_SLICE);
- }
- void TimeSlicer::stopSlicer() {
- if (!started) return;
- started = 0;
- timerclient_killTimer(TIMER_SLICE);
- onSlicerStop();
- firstslicetime = -1;
- }
- void TimeSlicer::onSlicerStop() {
- }
- void TimeSlicer::onSlicerStart() {
- }
- int TimeSlicer::isSlicerStarted() {
- return started;
- }
- void TimeSlicer::timerclient_timerCallback(int id) {
- if (id == TIMER_SLICE) {
- DWORD now = Std::getTickCount();
- runSlice(now, now + (int)((float)duration * max_cpu_usage));
- } else
- TimerClient::timerclient_timerCallback(id);
- }
- void TimeSlicer::runSlice(DWORD start, DWORD stopwhen) {
- DWORD now = Std::getTickCount();
- slicecount = 0;
- onBeginSliceBatch();
- if (slicecount == 0 && firstslicetime != -1) stopwhen = now + firstslicetime;
- while (Std::getTickCount() < stopwhen) {
- onSlice();
- slicecount++;
- if (!started) break; // got aborted
- }
- onEndSliceBatch();
- }
|