Реферат: Эффективная многопоточность

dbIdleTime = GetCPUUsage();

}

return dbIdleTime;

}

// Возвращает true, если поток имеет незавершенные операции ввода/вывода

bool HasThreadIoPending(HANDLE hThread = GetCurrentThread())

{

typedef NTSTATUS (NTAPI ZwQueryInformationThread_t)(

IN HANDLE ThreadHandle,

IN NT::THREADINFOCLASS ThreadInformationClass,

OUT PVOID ThreadInformation,

IN ULONG ThreadInformationLength,

OUT PULONG ReturnLength OPTIONAL

);

static ZwQueryInformationThread_t* ZwQueryInformationThread = 0;

if(!ZwQueryInformationThread)

{

ZwQueryInformationThread = (ZwQueryInformationThread_t*)GetProcAddress(

GetModuleHandle(_T("ntdll.dll")), _T("NtQueryInformationThread"));

}

ULONG io = 0;

ZwQueryInformationThread(hThread, NT::ThreadIsIoPending, &io, 4, 0);

return io > 0;

}

// Возвращает количество необработанных запросов в очереди порта

DWORD GetIoCompletionLen(HANDLE hIoPort)

{

typedef NTSTATUS (NTAPI ZwQueryIoCompletion_t)(

IN HANDLE IoCompletionHandle,

К-во Просмотров: 416
Бесплатно скачать Реферат: Эффективная многопоточность