Festplatte Energie Sparmodus

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Festplatte Energie Sparmodus

Beitrag von AUGE_OHR »

hi,

Es ist ja "nicht gut" für Xbase++ Applicationen wenn die Festplatte in
"standby" geht. Die Problem wird scheinbar um so grösser je mehr RAM
man hat. Er geht wohl zuerst durch das RAM und wenn er "durch" ist erst
auf die Festplatte.

Nun frage ich nach eine API wo man den "Energie" Modus der Festplatte
abfragen / setzten kann um zu verhindern das sowas passiert den der
(DA)User kommt ja an diese Einstellung ran ...
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Jimmy,

das Thema ist jetzt neu für mich. Was für Probleme gibt es denn dabei?

Ich selber habe da noch keine Probleme mit gehabt. Allerdings habe ich auch keine exzessive 24/7-Nutzung bis jetzt gehabt.

Jan
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Jimmy.

Ich kann mir nicht vorstellen, daß es eine Windows-API-Funktion gibt, die das abzufragen in der Lage ist, da lange nicht alle Festplatten diesen Modus kennen. Da ist m.E. Direktzugriff auf den Treiber nötig.

BTW, auch eine lustige Einstellung ist "Computer kann Gerät ausschalten, um Energie zu sparen" bei Netzwerkkarten. Gerade bei den billigeren Modellen kann das dazu führen, daß man die Handles auf eigentlich geöffnete Dateien verliert, weil das OS der Meinung ist, daß das Netzwerklaufwerk nicht mehr verfügbar ist.
Herzlich,
Tom
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Ja Tom, da kann ich dir nur beipflichten, das hat mir schon einige 8999 -Fehler gebracht :?
Viele Grüße
Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,

könnte es sein das man es mit "Powrprof.dll" die HD-Sleep Einstellungen bekommt ?

GetDevicePowerState()
http://msdn2.microsoft.com/en-us/librar ... S.85).aspx
/// <summary>
/// Checks is a HDD is currently sleeping (wound down)
/// </summary>
/// <param name="deviceID">Integer value for volume, eg. 0</param>
/// <returns>Boolean value stating if the hdd in question is sleeping</returns>
public bool DriveAlseep(int deviceID)
{

// call power state api and return if drive is asleep
bool fOn = false, ret = true;
System.IntPtr ioHandle = this.getDeviceHandle(deviceID);
if (ioHandle != System.IntPtr.Zero && cPower.GetDevicePowerState(ioHandle, out fOn))
ret = fOn;
cPower.CloseHandle(ioHandle);
return !ret;
oder
protected string ReportDiskStatus()
{
string status = string.Empty;
bool fOn = false;

Assembly assembly = Assembly.GetExecutingAssembly();
FileStream[] files = assembly.GetFiles();
if (files.Length > 0)
{
IntPtr hFile = files[0].Handle;
bool result = GetDevicePowerState(hFile, out fOn);
if (result)
{
if (fOn)
{
status = "Disk is powered up and spinning";
}
else
{
status = "Disk is sleeping";
}
}
else
{
status = "Cannot get Disk Status";
}
Console.WriteLine(status);
}
return status;
}
ich habe aber keine Ahnung wie ich an das "Device" handle der Festplatte
komme ...

Günter ... please help !
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Jimmy,

wo siehst du da ein Problem ?

Ein laufendes Programm mit offenen Dateien greift doch öffters auf Festplatten zu, sodass diese keine 15 Minuten ohne Benutzung registrieren und auch nicht abschalten ... ?
Selbst wenn ich nichts mache und mich dann am 'eingeschlafenen PC' wieder anmelde Bildschirmschoner, reicht das doch aus um die Festplatte zu starten, bevor ich überhaupt am Programm was machen kann oder ?

Ich habe diese Stromspareinstellung selbst auf einem kleinen 'Server' aktiviert, aber keine Probleme ... hat nur etwas gedauert beim ersten Zugriff.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: wo siehst du da ein Problem ?

Ich habe diese Stromspareinstellung selbst auf einem kleinen 'Server' aktiviert, aber keine Probleme ... hat nur etwas gedauert beim ersten Zugriff.
Es hängt wohl auch von der Hardware ab. Bei meinem P4 ist es so wie
bei dir d.h. wenn ich ein CMD Fenster aufrufe dauert es eine Weile bis
der das Fenster aufmacht. Allerdings ist das auch scheinbar von RAM
abhängig "wie schnell" er darauf zugreift. Je mehr RAM desdo länger dauert es bis er auf die Festplatte zugreifen will ...

Nun habe ich ja "die" Workstation (P3V4X-E) der ich mehr RAM gegeben
habe die wieder mal Probleme gemacht hat. Im Logbuch "sah" ich das sie
vorher wohl Mittagspause gemacht hat und der Energie Modus auf 1Std
für die Festplatte stand. (Obwohl ich ihn auf 0 gestellt hatte ...)

Nun kommt der "Witz" : Im Logbuch sind vor der Fehler noch Einträge d.h.
es sind noch Daten bearbeitet worden bevor der Fehler auftrat. Also hab
ich mal mit dem RAM experimentiert und mehr/weniger versucht. Dabei
stellte ich dan wieder fest das es länger dauerte wenn ich mehr RAM habe
bis der Fehler kommt und die Menge an "geschriebenen" Daten
proportional zum RAM ist.

Nun ist mir vorher schon aufgefallen das ich im Novell Netzwerk vieles aus
dem "Cache" gemacht wird und auch ein COMMIT den "Cache" nicht gleich
"leert" d.h. die Festplatte wird nicht immer aus dem "Schafmodus geweckt".

Bei "dem" PC ist es nun extrem d.h. es kommt ein Fehler nachdem er den
"Cache" geleert hat und "nachladen" will. Also muss ich verhindern das
ein User das Timeout > 0 setzt bzw. eine Meldung an mich.

Das es bei andere Hardware nicht so passiert kann ich an meinen alten
Notebook sehen (Compaq E500, 900MHz, 512MB). Da kann ich in den
Standby wenn ich den Deckel schliesse und später genau an der Stelle
weiterarbeiten ... ohne Probleme.

Allerdings macht das wohl nicht jedes Notebook den in der 337 gibt es
extra nun den Event :SystemPowerStatus() was genau dafür gedacht
ist wenn ein User den Laptop-Deckel schliesst.
gruss by OHR
Jimmy
Antworten