20 #include "JackMMCSS.h"    21 #include "JackError.h"    28 avSetMmThreadCharacteristics JackMMCSS::ffMMCSSFun1 = NULL;
    29 avSetMmThreadPriority JackMMCSS::ffMMCSSFun2 = NULL;
    30 avRevertMmThreadCharacteristics JackMMCSS::ffMMCSSFun3 = NULL;
    31 JACK_HANDLE JackMMCSS::fAvrtDll;
    33 std::map<jack_native_thread_t, HANDLE> JackMMCSS::fHandleTable;
    35 JackMMCSS::JackMMCSS()
    37     fAvrtDll = LoadJackModule(
"avrt.dll");
    39     if (fAvrtDll != NULL) {
    40         ffMMCSSFun1 = (avSetMmThreadCharacteristics)GetJackProc(fAvrtDll, 
"AvSetMmThreadCharacteristicsA");
    41         ffMMCSSFun2 = (avSetMmThreadPriority)GetJackProc(fAvrtDll, 
"AvSetMmThreadPriority");
    42         ffMMCSSFun3 = (avRevertMmThreadCharacteristics)GetJackProc(fAvrtDll, 
"AvRevertMmThreadCharacteristics");
    46 JackMMCSS::~JackMMCSS()
    49 int JackMMCSS::MMCSSAcquireRealTime(jack_native_thread_t thread, 
int priority)
    51     if (fHandleTable.find(thread) != fHandleTable.end()) {
    57         HANDLE task = ffMMCSSFun1(
"Pro Audio", &dummy);
    59             jack_error(
"AvSetMmThreadCharacteristics error : %d", GetLastError());
    60         } 
else if (ffMMCSSFun2(task, Jack::AVRT_PRIORITY(priority - BASE_REALTIME_PRIORITY))) {
    61             fHandleTable[thread] = task;
    62             jack_log(
"AvSetMmThreadPriority success");
    65             jack_error(
"AvSetMmThreadPriority error : %d", GetLastError());
    72 int JackMMCSS::MMCSSDropRealTime(jack_native_thread_t thread)
    74     if (fHandleTable.find(thread) != fHandleTable.end()) {
    75         HANDLE task = fHandleTable[thread];
    76         if (ffMMCSSFun3(task) == 0) {
    77             jack_error(
"AvRevertMmThreadCharacteristics error : %d", GetLastError());
    79             jack_log(
"AvRevertMmThreadCharacteristics success");
 SERVER_EXPORT void jack_error(const char *fmt,...)
SERVER_EXPORT void jack_log(const char *fmt,...)