Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/47: Рейтинг темы: голосов - 47, средняя оценка - 4.53
47 / 36 / 0
Регистрация: 21.05.2010
Сообщений: 301
1

Как в C++ управлять пк

23.11.2010, 15:17. Показов 8708. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте, я начал изучать С++, уже кучи материалов перерил, но немогу понять как физически упровлять пк, например отслеживать температуру цп или изменять скорость куллеров, и прочее. Скиньте пожалуйсто статьи на эту тему или скажите какие небудь книги на эту тему.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2010, 15:17
Ответы с готовыми решениями:

Как пользоваться событиями или как управлять формой из потока?
Начнем справа налево: Предположим есть поток tr1 и глобальная переменная int i; void tr1(){ ...

Как создать список номеров которыми можно управлять как базой данных
Привет Полный новичок в программировании, вопрос по Delphi Как создать список номеров,...

Как управлять камерой в 3д?
Здравствуйте, сделал небольшой 3д мир на делфи 10,3 FMX. И у меня появился вопрос как сделать так...

Управлять как одным
как можно управлять несколькими гаджетамы как будто один, при изменении размера одного что бы...

16
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
23.11.2010, 15:20 2
Win API есть такая штука (под виндой), с ее помощью можно, но имхо, пока рановато за такие задачи браться. Лучше язык подучить (в т.ч. и родной).
2
47 / 36 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 15:33  [ТС] 3
Родной труднее чем с++ XD
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
23.11.2010, 18:42 4
Работать с аппараутрой можно только через операционную систему. Операционная система тебе предоставляет некоторый интерфейс взаимодействия (API), при помощи которого прикладная программа может системе что-то "сказать" или что-то "спросить". К языку программирования это не имеет никакого отношения
1
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
23.11.2010, 20:14 5
так вопрос для общего развития ... эта же информация не зависит от операционки, значит должна содержаться вне ее. Как то можно узнать, где она конкретно хранится(там адрес в памяти или тому подобное) ?)
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
23.11.2010, 21:00 6
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от KuKu Посмотреть сообщение
так вопрос для общего развития ... эта же информация не зависит от операционки, значит должна содержаться вне ее. Как то можно узнать, где она конкретно хранится(там адрес в памяти или тому подобное) ?)
Информация хранится в аппаратуре. Там есть термометр, с которого можно снять показания. Есть драйвер под материнскую плату, при помощи которого операционная система "общается" с аппаратурой. Драйвер - это такой же интерфейс между ОС и машиной, каким является API (интерфейс между приложением и ОС).

На пальцах это дело выглядит примерно так. Любое устройство подключается через так называемые порты ввода-вывода, которые при помощи материнской платы отображаются на некие адреса памяти. Т.е. в машине может стоять 1 гиг памяти, но адреса, к примеру, из диапазона 3.7-4 гига (при условии 32-битного режима) используются для портов ввода-вывода (независимо от количества памяти в машине). Эти адреса материнская плата транслирует не на модули памяти, а на шину, через которую втыкаются устройства. Операционная система выполняет "обычное" (или почти обычное, детально не могу сказать) чтение или запись в память по адресу, отображённому на устройство. Это обращение пойдёт в устройство. Например (чисто теоретически), видеокарта может работать таким образом, что если по адресу 0x11223344 записать единичку, то по адресу 0x11223345 будет сформировано значение температуры графического процессора, а если записать двойку, то будет сформировано скорость вращения кулера и т.п. К каждому устройству прилагается драйвер, который в одной стороны "знает", как общаться с устройством, с другой стороны знает, по каким правилам надо общаться с ОС (потому в каждой ОС свои принципы работы с драйверами)

Ну из сказанного можно понять, почему при наличии 4 гигов оперативы, реально видно только 3.5 или 3.2 или 3 (в зависимости от материнской платы). Точно так же можно понять, почему драйвер видеокарты под винду не будет работать под линуксом (хотя казалось бы, машина одна и та же и коды исполняются те же самые). Точно так же программа, работающая с устройством под виндой непосредственно через драйвер (т.е. на низком уровне) не будет работать под линуксом, даже если перекомпилять исходники. именно поэтому пишут интерфейсы ещё более высокого уровня. Например, Open GL. Это набор библиотек, который с одного конца имеет несколько реализаций под различные ОС, с другой стороны имеет интерфейс прикладного уровня, НЕ зависящий от операционной системы.

Так или иначе, между пользовательской программой и аппаратурой всегда имеется цепочка из нескольких интерфейсов начиная драйвером и заканчивая прикладной библиотекой. И всё, что находится между программой и машиной, построено по принципу конструктора: из различных кубиков выстраивается нужная цепочка. Но на практике не все кубики имеются в наличии, хотя теортеически их всегда можно создать (было бы кому этим заняться)
11
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
23.11.2010, 21:40 7
а средствами с/c++ можно читать(писать) куда то в конкретную ячейку памяти на устройство или через виндоусовский дебаггер или нам операционка не даст ?
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
23.11.2010, 21:57 8
Я не специалист в этой области, но напрямую писать в порт ввода-вывода из пользовательского приложения скорее всего нельзя (была бы такая возможность - машину можно было бы убить одним неосторожным движением). Для этого и существует драйвер. Общение с драйвером идёт на уровне типа "запиши в порт такой-то значение такое-то", но при этом это всё накрыто интерфейсом, отрезанным от абсолютных значений адресов. При этом каждое такое обращение драйвер проверяет на корректность и забраковывает недопустимые
2
47 / 36 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 22:13  [ТС] 9
Неужели все программы, например speedfan, проходят столько сложных операций при работе?
1
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
23.11.2010, 22:18 10
Цитата Сообщение от shtopor20 Посмотреть сообщение
Неужели все программы, например speedfan, проходят столько сложных операций при работе?
это много проще, нежели напрямую с оборудованием работать
1
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
23.11.2010, 22:31 11
Все намного проще.
Видел код на бейсике котрый вот так определял текущую температуру процессора и чипсета
Код
#ADR_REG = $295 ;Это адреса регистров системной платы, с помощью которых можно узнать температуру
#DATA_REG = $29
Procedure Termo(z) ; Эта процедура работает в параллельном потоке
Shared *Inp32_address, *Out32_address

 Repeat ; Начало "безконечного" цикла Repeat ForEver
   CallFunctionFast(*Out32_address, #ADR_REG, $2B) ; Получает текущую температуру процессора
   x=CallFunctionFast(*Inp32_address, #DATA_REG)
   SetGadgetItemText(0,0,StrU(x, #PB_Byte)+" °C",1) ; отображаем её в таблице
   
   CallFunctionFast(*Out32_address, #ADR_REG, $29) ; Получает текущую температуру системной платы
   x=CallFunctionFast(*Inp32_address, #DATA_REG)
   SetGadgetItemText(0,1,StrU(x, #PB_Byte)+" °C",1)  ; отображаем её в таблице
   
   SetGadgetText(3, Str(CpuUsage())+" %" ) ; Получаем и отображаем текущую загрузку процессора
   
  Delay(1000) ; Пауза, равная 1 секунде.
  
 ForEver
EndProcedure
Работает, но не со всеми матерями и процессорами.
Вложения
Тип файла: rar TermoControl.rar (27.8 Кб, 20 просмотров)
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
23.11.2010, 23:15 12
Цитата Сообщение от shtopor20 Посмотреть сообщение
Неужели все программы, например speedfan, проходят столько сложных операций при работе?
Основную массу сложных операций производит ОС. От прикладной программы требуется лишь воспользоваться услугами
1
47 / 36 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 23:18  [ТС] 13
Разве винда отвечает за температуру и распряделение электричества на кулеры?
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
23.11.2010, 23:32 14
Цитата Сообщение от shtopor20 Посмотреть сообщение
А в чем разница?
Разница в том, что для прикладной программы не надо писать сотни строк кода для работы с устройством. Интерфейс, который тебе выдаёт операционная система, позволяет практически одинаково работать с любым устройством. Т.е. посмотреть температуру процессора, открыть привод DVD-дисковода или задать настройки для сетевой карты - это практически одно и то же действие: вызов функции API с некоторым набором параметров. Тебе не надо заботиться о том, в какой слот на плате воткнуто устройство, это устройство IDE, PCI или AGP и т.п. - это всё забота ОС.

Цитата Сообщение от shtopor20 Посмотреть сообщение
Разве винда отвечает за температуру и распряделение электричества на кулеры?
За это отвечает устройство (железо). ОС лишь может сделать какие-то настройки, предусмотренные разработчиками устройства (если таковые вообще имеются). На старых процессорах кулер - это всего лишь вентилятор с двумя состояниями: "пропеллер включен" и "пропеллер выключен", причём текущее состояние зависит только от того, включен комп или нет. Устройство не подразумевало, что им можно управлять со стороны ОС, а потому это простая железяка, про которую материнская плата даже не знает. Максимум, что она знает - это то, что в слот воткнута какая-то хрень, потребляющая электричество согласно такому-то стандарту, а что это за хрень - материнская плата не знает
1
47 / 36 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 23:55  [ТС] 15
А где можно найти информацию о том как через программу управлять всем этим (кулерром дисководом и прочем), просто я привык что железо отдельно программа отдельно, и я тормажу во всем этом сильно
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
23.11.2010, 23:59 16
Цитата Сообщение от shtopor20 Посмотреть сообщение
А где можно найти информацию о том как через программу управлять всем этим (кулерром дисководом и прочем), просто я привык что железо отдельно программа отдельно, и я тормажу во всем этом сильно
В посте #2 уже всё об этом сказано

Добавлено через 3 минуты
Под линуксом универсальный системный вызов для работы с устройствами называется ioctl
В случае винды это, судя по всему, DeviceIoControl. Вот про это и ищи
1
47 / 36 / 0
Регистрация: 21.05.2010
Сообщений: 301
24.11.2010, 01:14  [ТС] 17
Вот есть кое что http://netcode.ru/cpp/?artID=3236
0
24.11.2010, 01:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2010, 01:14
Помогаю со студенческими работами здесь

Как управлять checkbox?
Как сделать масив из 3 checkbox чтобы при нажатии на одон из них все остальные становились такими...

Как управлять мышей с С++?
У меня стоит 64-разрядный Windows 7, и на нем не работает обычная C++, посоветуйте, что сделать для...

Как управлять температурой?
Допустим задача такова: Нам дано промежуток температуры воды от 0 до 75 градусов, и чтобы он держал...

Как управлять разрешениями?
слишком обобщённое название , но всё же поясню: я первый раз пытаюсь сделать сайт на vps windows...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru