![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Как определить число ядер процессора и их загрузку? Какие есть для этого функции?
|
#2
|
|||
|
|||
![]() Есть ли хоть что-нибудь по многоядерности?
|
#3
|
||||
|
||||
![]() Функция API GetSystemInfo позволяет узнать несколько параметров процессора. Функция имеет вид:
procedure GetSystemInfo(var lpSystemInfo: TSystemInfo); stdcall; Функция заполняет поля структуры lpSystemInfo, в частности, там есть поля: * dwActiveProcessorMask - битовая маска, представляющая процессоры, установленные в системе (каждый бит соответствут процессору, например, в двухпроцессорной системе установлено два младших бита) * dwNumberOfProcessors - количество процессоров в системе * dwProcessorType - тип процессора * wProcessorLevel, wProcessorRevision - характеристики процессора (их трактовка зависит от типа) При этом следует учесть, что процессоры с технологией HT считаются как два процессора (при условии, что включена поддержка HT) В мультипроцессорной системе (на базе нескольких процессоров или процессора с технологией HyperThreading) можно указать системе, на каком процессоре рекомендуется выполнять поток. Реализуется это при помощи функции API SetThreadIdealProcessor: function SetThreadIdealProcessor(hThread: THandle; dwIdealProcessor: DWORD): BOOL; Thread - Handle потока, для текущего потока приложения его можно узнать через GetCurrentThread dwIdealProcessor - номер процессора (отсчет идет с 0) Вот пример как выполнить поток на нужном процессоре begin // Выбор процессора SetThreadIdealProcessor(GetCurrentThread, 1); // Мертвый цикл WHILE TRUE DO ; end; Хорошо написанная программа не требует документации ICQ 9-184-668. |