Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: How get CPU Clock on Pocket PC 2003/2005?  (Прочитано 7756 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Stra_nn_ik
Гость
« : 27-02-2006 18:41 » 

Как узнать: скорость работы процессора и собственно что за процессор стоит - на покетах (под виндой). Или может кто подскажет куда копать?

PS Делать циклы или задержки и мерить таймером не корректно. В системе куча других процессов работает.
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 28-02-2006 10:21 » 

Тип процессора можно узнать вызовом GetSystemInfo

Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 28-02-2006 11:40 » 

Теоретически максимальная частота процессора доступна через KernelIoControl и управляющий код IOCTL_PROCESSOR_INFORMATION

На практике, однако, дело обстоит так: у меня Windows Mobile 2003 (ака Windows CE 4.2) возвращает в значение частоты 0.

Получается такой вывод:
Version: 1
Processor code: Intel(R)
Core Revision: 0
Processor name: PXA255
Processor Revision: 11520
Catalog number:
Vendor: INTEL
Instruction Set: 0
Clock speed: 0

Вот программа, которая сбрасывает сведения о процессоре в файл cpu_log.txt
Код:
// #include <pkfunks.h>
#include <windows.h>
#include <stdio.h>

unsigned int  IOCTL_PROCESSOR_INFORMATION = 0x01010064;

typedef struct __PROCESSOR_INFO {
WORD wVersion;
WCHAR szProcessorCore[40];
WORD wCoreRevision;
WCHAR szProcessorName[40];
WORD wProcessorRevision;
WCHAR szCatalogNumber[100];
WCHAR szVendor[100];
DWORD dwInstructionSet;
DWORD dwClockSpeed;
} PROCESSOR_INFO, *PPROCESSOR_INFO;

KernelIoControl(DWORD dwCode, void *in, DWORD insize, void *out, DWORD outsize, DWORD *returned);

int get_maximum_cpu_speed(DWORD * p_dwSpeed, FILE * log)
{
    DWORD nReturned;
PROCESSOR_INFO pinfo;

if (p_dwSpeed == NULL) return 0;
memset(&pinfo, 0, sizeof(pinfo));
pinfo.wVersion = 1;

    if (!KernelIoControl(IOCTL_PROCESSOR_INFORMATION, NULL, 0, &pinfo, sizeof(pinfo), &nReturned)) {
        return 0;
    }
if (log != NULL)
{
fwprintf(log, L"Version: %d\n", pinfo.wVersion);
fwprintf(log, L"Processor code: %s\n", pinfo.szProcessorCore);
fwprintf(log, L"Core Revision: %d\n", pinfo.wCoreRevision);
fwprintf(log, L"Processor name: %s\n", pinfo.szProcessorName);
fwprintf(log, L"Processor Revision: %d\n", pinfo.wProcessorRevision);
fwprintf(log, L"Catalog number: %s\n", pinfo.szCatalogNumber);
fwprintf(log, L"Vendor: %s\n", pinfo.szVendor);
fwprintf(log, L"Instruction Set: %d\n", pinfo.dwInstructionSet);
fwprintf(log, L"Clock speed: %d\n", pinfo.dwClockSpeed);
}
*p_dwSpeed = pinfo.dwClockSpeed;
    return 1;
}
int wmain()
{
unsigned int cpu = 0;
FILE * log = _wfopen(L"cpu_log.txt", L"w");
if (log == NULL) return 1;
if (!get_maximum_cpu_speed(&cpu, log))
{
fwprintf(log, L"Failed to get procesor information\n");
}
else
{
fwprintf(log, L"CPU speed %d\n", cpu);
}
fclose(log);
return 0;
}
Компилировал под VS 2005 с выключенной защитой от переполнения буфера (/GS-), исполнял на iPaq 2210
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines