Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
CPU Temperatur auslesen mit c++
- Ersteller M.E.
- Erstellt am
Simpson474
Fleet Admiral
- Registriert
- Sep. 2006
- Beiträge
- 12.819
Naja, wenn es um die Temperatur der einzelnen Cores geht, dann kann man diese mit den heutigen CPUs (Athlon 64 und Intel C2D) relativ "hardwareunabhängig" auslesen. Vom Mainboard ist man fast vollkommen unabhängig, nur die unterschiedlichen CPUs müssen extra implementiert werden.
1
1668mib
Gast
Wen interessiert das Mainboard, wenn die CPU selbst die relevanten Informationen liefert?Backslash schrieb:Das Problem ist, dass das bei jedem Board unterschiedlich ist, die Tools benutzen da eigene Treiber oder evtl. DLLs die vom Mainboardhersteller zur Verfügung gestellt werden.
Dummerweise muss man allerdings die CPU kennen, deren Temperatur man auslesen möchte. Allgemeine Patentlösungen wirst du allerdings kaum einfach so im Internet finden, wenn man betrachtet, wieviel CPUID sich die Nutzung der eigenen Bibliotheken kosten lässt: http://www.cpuid-pro.com/hwmonitor.php
Wenn du allerdings genau weißt was für einen Prozessor du hast und das Programm eben nur für eine Zwecke funktionieren muss, hast du deutlich größere Chancen auf Erfolg.
1
1668mib
Gast
Also lieber bin ich CPU-abhängig als Mainboard-Herstellerabhängig...
1
1668mib
Gast
z.B. http://www.heise.de/kiosk/archiv/ct/07/11/218
dazu noch die Seite: http://www.withopf.com/tools/cputempwatch/
Zudem noch die Quellen-Angabe aus dem c't Artikel:
dazu noch die Seite: http://www.withopf.com/tools/cputempwatch/
Zudem noch die Quellen-Angabe aus dem c't Artikel:
[1] Intel64 and IA32 Software Development Manual 3a, www.intel.com/design/processor/manuals/253668.pdf
[2] Power and Thermal Management in the Intel Core Duo Processor, www.intel.com/technology/itj/2006/volume10issue02/art03_Power_and_Thermal_Management/vol10_art03.pdf
[3] Intel Core Duo Processor and Intel Core Solo Processor on 65 nm Process Specification Update, ftp://download.intel.com/design/mobile/SPECUPDT/309222.htm
[4] Revision Guide for AMD NPT Family 0Fh Processors, www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/33610.pdf
Zuletzt bearbeitet:
- Registriert
- Jan. 2007
- Beiträge
- 1.923
Hallo,
Danke erstmal für die schnelle und ausführliche Hilfe!
ICh glaube, wenn das so komplex ist, werde ich das doch nicht programmieren.
Das ganze sollte ein kleines Benchmark programm werden, mit dem man die CPU 100% auslastet und dabei die Temperatur lesen kann.
Jetz kanns halt nur 100% auslasten :-)
MfG
M.E.
Danke erstmal für die schnelle und ausführliche Hilfe!
ICh glaube, wenn das so komplex ist, werde ich das doch nicht programmieren.
Das ganze sollte ein kleines Benchmark programm werden, mit dem man die CPU 100% auslastet und dabei die Temperatur lesen kann.
Jetz kanns halt nur 100% auslasten :-)
MfG
M.E.
K
krawumm
Gast
Du brauchst in jedem Fall einen Kernelmode-Treiber für direktes I/O. Such mal nach winio.dll und winio.sys, die sind frei verfügbar. Und dann müsstest du dich noch mt dem SMB (System Management Bus) beschäftigen, daran hängen nämlich die ganzen Mainboardkomponenten wie Lüfter-, Spannung- und Temperaturüberwachung.
Viel Spaß.
Viel Spaß.
1
1668mib
Gast
Um Core 2-Prozessoren maximal auszulasten soll dieses Tool ganz gut sein: http://www.withopf.com/tools/cputempwatch/Core2MaxPerf-11.zip
mensch183
Captain
- Registriert
- Jan. 2008
- Beiträge
- 3.666
Für Core2-CPUs:
Die CPU-Temperatur kannst du aus einem MSR (machine specific register) auslesen. Nummer muß in der CPU-Doku stehen. Wenn das unter Windows passieren soll, mußt du nen kleinen Treiber schreiben, da rdmsr ein privilegierter Befehl ist, den nur der Kernel ausführen darf. ECX bekommt die MSR-Nummer, das Ergebnis (64 bit) landet in EDX:EAX. Etwa so:
#include <ntddk.h>
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) {
ULONG ulECX = 0x000????; // ???? ist die Registernummer
ULONG ulEAX = 0;
ULONG ulEDX = 0;
_asm{
mov ecx,ulECX
rdmsr
mov ulEAX,eax
mov ulEDX,edx
}
// irgendwas damit tun
return 0xFFFFFFFF;
}
Sollte so funktionieren. Mußt nur noch die MSR-Nummer aussuchen und die Werte irgendwie verarbeiten. Ka, ob das dann schon Grad Celsius sind ... vermutlich nicht. Gibt außerdem 2 Werte in den Core2Duo-CPUs ... Tcase(CPU-Gehäuse) und Tjunction (CPU-Kern) ... google fragen.
Die CPU-Temperatur kannst du aus einem MSR (machine specific register) auslesen. Nummer muß in der CPU-Doku stehen. Wenn das unter Windows passieren soll, mußt du nen kleinen Treiber schreiben, da rdmsr ein privilegierter Befehl ist, den nur der Kernel ausführen darf. ECX bekommt die MSR-Nummer, das Ergebnis (64 bit) landet in EDX:EAX. Etwa so:
#include <ntddk.h>
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) {
ULONG ulECX = 0x000????; // ???? ist die Registernummer
ULONG ulEAX = 0;
ULONG ulEDX = 0;
_asm{
mov ecx,ulECX
rdmsr
mov ulEAX,eax
mov ulEDX,edx
}
// irgendwas damit tun
return 0xFFFFFFFF;
}
Sollte so funktionieren. Mußt nur noch die MSR-Nummer aussuchen und die Werte irgendwie verarbeiten. Ka, ob das dann schon Grad Celsius sind ... vermutlich nicht. Gibt außerdem 2 Werte in den Core2Duo-CPUs ... Tcase(CPU-Gehäuse) und Tjunction (CPU-Kern) ... google fragen.
Zuletzt bearbeitet:
Ähnliche Themen
- Antworten
- 16
- Aufrufe
- 1.206
- Antworten
- 4
- Aufrufe
- 490
- Antworten
- 62
- Aufrufe
- 2.193
- Antworten
- 40
- Aufrufe
- 2.254
- Antworten
- 9
- Aufrufe
- 1.254