Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
shtopor20
32 / 21 / 0
Регистрация: 21.05.2010
Сообщений: 301
#1

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

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

Здраствуйте, я начал изучать С++, уже кучи материалов перерил, но немогу понять как физически упровлять пк, например отслеживать температуру цп или изменять скорость куллеров, и прочее. Скиньте пожалуйсто статьи на эту тему или скажите какие небудь книги на эту тему.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2010, 15:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как в C++ управлять пк (C++):

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

Как управлять курсором в с++ - C++
Напишите все команды для разъянения управления курсором(Нажатия обеих клавиш, передвжиение мыши))

Как заставить программу управлять программами? - C++
Подскажите как заставить программу управлять программами, в случае если необходимо применить много раз одну и ту же операцию из стандартной...

Как управлять мигающим курсором в консоли? - C++
Здравствуйте. Какой оператор нудно использовать что бы вывести константу в определенной точке (например в 3 ряду 2 колонке, когда курсор...

Как управлять наследниками через базовый класс - C++
Всем привет)Есть вот одна проблема. Хочу управлять объекты через другие объекты. Допустим есть базовый класс class base { ...

Как управлять веб-камерой с помощью кода. - C++
Здравствуйте, как написать программу, которая будет использовать веб-камеру для съемки видео или фотографий. Знаете, что-то вроде motion...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
23.11.2010, 15:20 #2
Win API есть такая штука (под виндой), с ее помощью можно, но имхо, пока рановато за такие задачи браться. Лучше язык подучить (в т.ч. и родной).
2
shtopor20
32 / 21 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 15:33  [ТС] #3
Родной труднее чем с++ XD
1
Evg
Эксперт CАвтор FAQ
17809 / 6019 / 388
Регистрация: 30.03.2009
Сообщений: 16,535
Записей в блоге: 26
23.11.2010, 18:42 #4
Работать с аппараутрой можно только через операционную систему. Операционная система тебе предоставляет некоторый интерфейс взаимодействия (API), при помощи которого прикладная программа может системе что-то "сказать" или что-то "спросить". К языку программирования это не имеет никакого отношения
1
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,985
23.11.2010, 20:14 #5
так вопрос для общего развития ... эта же информация не зависит от операционки, значит должна содержаться вне ее. Как то можно узнать, где она конкретно хранится(там адрес в памяти или тому подобное) ?)
1
Evg
Эксперт CАвтор FAQ
17809 / 6019 / 388
Регистрация: 30.03.2009
Сообщений: 16,535
Записей в блоге: 26
23.11.2010, 21:00 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от KuKu Посмотреть сообщение
так вопрос для общего развития ... эта же информация не зависит от операционки, значит должна содержаться вне ее. Как то можно узнать, где она конкретно хранится(там адрес в памяти или тому подобное) ?)
Информация хранится в аппаратуре. Там есть термометр, с которого можно снять показания. Есть драйвер под материнскую плату, при помощи которого операционная система "общается" с аппаратурой. Драйвер - это такой же интерфейс между ОС и машиной, каким является API (интерфейс между приложением и ОС).

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

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

Так или иначе, между пользовательской программой и аппаратурой всегда имеется цепочка из нескольких интерфейсов начиная драйвером и заканчивая прикладной библиотекой. И всё, что находится между программой и машиной, построено по принципу конструктора: из различных кубиков выстраивается нужная цепочка. Но на практике не все кубики имеются в наличии, хотя теортеически их всегда можно создать (было бы кому этим заняться)
11
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,985
23.11.2010, 21:40 #7
а средствами с/c++ можно читать(писать) куда то в конкретную ячейку памяти на устройство или через виндоусовский дебаггер или нам операционка не даст ?
1
Evg
Эксперт CАвтор FAQ
17809 / 6019 / 388
Регистрация: 30.03.2009
Сообщений: 16,535
Записей в блоге: 26
23.11.2010, 21:57 #8
Я не специалист в этой области, но напрямую писать в порт ввода-вывода из пользовательского приложения скорее всего нельзя (была бы такая возможность - машину можно было бы убить одним неосторожным движением). Для этого и существует драйвер. Общение с драйвером идёт на уровне типа "запиши в порт такой-то значение такое-то", но при этом это всё накрыто интерфейсом, отрезанным от абсолютных значений адресов. При этом каждое такое обращение драйвер проверяет на корректность и забраковывает недопустимые
2
shtopor20
32 / 21 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 22:13  [ТС] #9
Неужели все программы, например speedfan, проходят столько сложных операций при работе?
1
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
23.11.2010, 22:18 #10
Цитата Сообщение от shtopor20 Посмотреть сообщение
Неужели все программы, например speedfan, проходят столько сложных операций при работе?
это много проще, нежели напрямую с оборудованием работать
1
PB
Просто прогер
1281 / 1068 / 11
Регистрация: 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
Работает, но не со всеми матерями и процессорами.
1
Вложения
Тип файла: rar TermoControl.rar (27.8 Кб, 19 просмотров)
Evg
Эксперт CАвтор FAQ
17809 / 6019 / 388
Регистрация: 30.03.2009
Сообщений: 16,535
Записей в блоге: 26
23.11.2010, 23:15 #12
Цитата Сообщение от shtopor20 Посмотреть сообщение
Неужели все программы, например speedfan, проходят столько сложных операций при работе?
Основную массу сложных операций производит ОС. От прикладной программы требуется лишь воспользоваться услугами
1
shtopor20
32 / 21 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 23:18  [ТС] #13
Разве винда отвечает за температуру и распряделение электричества на кулеры?
1
Evg
Эксперт CАвтор FAQ
17809 / 6019 / 388
Регистрация: 30.03.2009
Сообщений: 16,535
Записей в блоге: 26
23.11.2010, 23:32 #14
Цитата Сообщение от shtopor20 Посмотреть сообщение
А в чем разница?
Разница в том, что для прикладной программы не надо писать сотни строк кода для работы с устройством. Интерфейс, который тебе выдаёт операционная система, позволяет практически одинаково работать с любым устройством. Т.е. посмотреть температуру процессора, открыть привод DVD-дисковода или задать настройки для сетевой карты - это практически одно и то же действие: вызов функции API с некоторым набором параметров. Тебе не надо заботиться о том, в какой слот на плате воткнуто устройство, это устройство IDE, PCI или AGP и т.п. - это всё забота ОС.

Цитата Сообщение от shtopor20 Посмотреть сообщение
Разве винда отвечает за температуру и распряделение электричества на кулеры?
За это отвечает устройство (железо). ОС лишь может сделать какие-то настройки, предусмотренные разработчиками устройства (если таковые вообще имеются). На старых процессорах кулер - это всего лишь вентилятор с двумя состояниями: "пропеллер включен" и "пропеллер выключен", причём текущее состояние зависит только от того, включен комп или нет. Устройство не подразумевало, что им можно управлять со стороны ОС, а потому это простая железяка, про которую материнская плата даже не знает. Максимум, что она знает - это то, что в слот воткнута какая-то хрень, потребляющая электричество согласно такому-то стандарту, а что это за хрень - материнская плата не знает
1
shtopor20
32 / 21 / 0
Регистрация: 21.05.2010
Сообщений: 301
23.11.2010, 23:55  [ТС] #15
А где можно найти информацию о том как через программу управлять всем этим (кулерром дисководом и прочем), просто я привык что железо отдельно программа отдельно, и я тормажу во всем этом сильно
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2010, 23:55
Привет! Вот еще темы с ответами:

Как пишут программы благодаря которым можно управлять объектами? - C++
Как пишут программы при помощи которых можно управлять предметами у себя дома? Например, когда кто-то откроет холодильник, придет сообщение...

Требуется программист для написания программы которая может управлять аудио потоком - C++
задачи этой программы при появлении сигнала на линейном входе или mic инициировать соединение с Icecast и гнать на него поток как только...

Нужно сделать чтобы можно было управлять типом возвращаемого значения функции - C++
// avg_function.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> using namespace...

независимо управлять типом входных данных массива для определения сред. ариф. и возвращаемым значением функции - C++
Нужно сделать чтобы можно было независимо управлять типом входных данных массива для определения сред. ариф. и возвращаемым значением...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.11.2010, 23:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru