Browse Source

More flexible RT priority setup on Windows.

tags/v1.9.11-RC1
Stephane Letz 10 years ago
parent
commit
47dea47ce4
3 changed files with 8 additions and 6 deletions
  1. +2
    -2
      windows/JackMMCSS.cpp
  2. +5
    -3
      windows/JackMMCSS.h
  3. +1
    -1
      windows/JackWinThread.cpp

+ 2
- 2
windows/JackMMCSS.cpp View File

@@ -46,7 +46,7 @@ JackMMCSS::JackMMCSS()
JackMMCSS::~JackMMCSS() JackMMCSS::~JackMMCSS()
{} {}
int JackMMCSS::MMCSSAcquireRealTime(jack_native_thread_t thread)
int JackMMCSS::MMCSSAcquireRealTime(jack_native_thread_t thread, int priority)
{ {
if (fHandleTable.find(thread) != fHandleTable.end()) { if (fHandleTable.find(thread) != fHandleTable.end()) {
return 0; return 0;
@@ -57,7 +57,7 @@ int JackMMCSS::MMCSSAcquireRealTime(jack_native_thread_t thread)
HANDLE task = ffMMCSSFun1("Pro Audio", &dummy); HANDLE task = ffMMCSSFun1("Pro Audio", &dummy);
if (task == NULL) { if (task == NULL) {
jack_error("AvSetMmThreadCharacteristics error : %d", GetLastError()); jack_error("AvSetMmThreadCharacteristics error : %d", GetLastError());
} else if (ffMMCSSFun2(task, AVRT_PRIORITY_CRITICAL)) {
} else if (ffMMCSSFun2(task, priority - BASE_REALTIME_PRIORITY)) {
fHandleTable[thread] = task; fHandleTable[thread] = task;
jack_log("AvSetMmThreadPriority success"); jack_log("AvSetMmThreadPriority success");
return 0; return 0;


+ 5
- 3
windows/JackMMCSS.h View File

@@ -36,8 +36,10 @@ typedef enum _AVRT_PRIORITY {
AVRT_PRIORITY_HIGH, /* 1 */ AVRT_PRIORITY_HIGH, /* 1 */
AVRT_PRIORITY_CRITICAL /* 2 */ AVRT_PRIORITY_CRITICAL /* 2 */
} AVRT_PRIORITY, *PAVRT_PRIORITY; } AVRT_PRIORITY, *PAVRT_PRIORITY;

typedef HANDLE (WINAPI *avSetMmThreadCharacteristics)(LPCTSTR, LPDWORD);
#define BASE_REALTIME_PRIORITY 90
typedef HANDLE (WINAPI *avSetMmThreadCharacteristics)(LPCTSTR, LPDWORD);
typedef BOOL (WINAPI *avRevertMmThreadCharacteristics)(HANDLE); typedef BOOL (WINAPI *avRevertMmThreadCharacteristics)(HANDLE);
typedef BOOL (WINAPI *avSetMmThreadPriority)(HANDLE, AVRT_PRIORITY); typedef BOOL (WINAPI *avSetMmThreadPriority)(HANDLE, AVRT_PRIORITY);
@@ -61,7 +63,7 @@ class SERVER_EXPORT JackMMCSS
JackMMCSS(); JackMMCSS();
~JackMMCSS(); ~JackMMCSS();
static int MMCSSAcquireRealTime(jack_native_thread_t thread);
static int MMCSSAcquireRealTime(jack_native_thread_t thread, int priority);
static int MMCSSDropRealTime(jack_native_thread_t thread); static int MMCSSDropRealTime(jack_native_thread_t thread);
}; };


+ 1
- 1
windows/JackWinThread.cpp View File

@@ -202,7 +202,7 @@ int JackWinThread::AcquireRealTimeImp(jack_native_thread_t thread, int priority)
{ {
jack_log("JackWinThread::AcquireRealTimeImp priority = %d", priority); jack_log("JackWinThread::AcquireRealTimeImp priority = %d", priority);


if (priority >= 90 && MMCSSAcquireRealTime(thread) == 0) {
if (priority >= (BASE_REALTIME_PRIORITY - 1) && MMCSSAcquireRealTime(thread, priority) == 0) {
jack_log("MMCSS API used to acquire RT for thread"); jack_log("MMCSS API used to acquire RT for thread");
return 0; return 0;
} else { } else {


Loading…
Cancel
Save