From 60f306607ead64f329a4c1f875af3b7ff5ad1149 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sun, 28 Feb 2016 11:09:54 +0800 Subject: Forbidden Magic. --- qmpmidiplay.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'qmpmidiplay.cpp') diff --git a/qmpmidiplay.cpp b/qmpmidiplay.cpp index 8f89e88..b93b0d1 100644 --- a/qmpmidiplay.cpp +++ b/qmpmidiplay.cpp @@ -2,10 +2,10 @@ #include #include #include +#include "qmpmidiplay.hpp" #ifdef _WIN32 -#include +#include #endif -#include "qmpmidiplay.hpp" void CMidiPlayer::fluidPreInitialize() { settings=new_fluid_settings(); @@ -17,7 +17,7 @@ void CMidiPlayer::fluidInitialize() fluid_synth_set_chorus(synth,FLUID_CHORUS_DEFAULT_N,FLUID_CHORUS_DEFAULT_LEVEL, FLUID_CHORUS_DEFAULT_SPEED,FLUID_CHORUS_DEFAULT_DEPTH, FLUID_CHORUS_DEFAULT_TYPE); -#ifndef WIN32 +#ifndef _WIN32 if(!singleInstance) { if(midiFile->getStandard()==4) @@ -127,6 +127,20 @@ void CMidiPlayer::processEventStub(const SEvent *e) break; } } +#ifdef _WIN32 +void w32usleep(uint64_t t) +{ + uint64_t st=0,ct=0,f=0; + QueryPerformanceFrequency((LARGE_INTEGER*)&f); + QueryPerformanceCounter((LARGE_INTEGER*)&st); + do{ + if(t>10000+(ct-st)*1000000/f)Sleep((t-(ct-st)*1000000/f)/2000); + else if(t>5000+(ct-st)*1000000/f)Sleep(1); + else std::this_thread::yield(); + QueryPerformanceCounter((LARGE_INTEGER*)&ct); + }while((ct-st)*1000000getEvent(0)->time;tceptrgetEventCount();) @@ -138,7 +152,7 @@ void CMidiPlayer::playEvents() if(resumed)resumed=false; else #ifdef _WIN32 - QThread::usleep((midiFile->getEvent(tceptr)->time-ct)*(dpt/1000)); + w32usleep((midiFile->getEvent(tceptr)->time-ct)*(dpt/1000)); #else std::this_thread::sleep_for(std::chrono::nanoseconds(midiFile->getEvent(tceptr)->time-ct)*dpt); #endif -- cgit v1.2.3