Seite 2 von 2

Re: Timer + autom. Aufwecken des PCs, wenn im Ruhezustand ?

Verfasst: 14.03.2011 17:03
von bobobo
funktioniert .. allerdings nicht ganz ohne strom

google mal wakeonlan

Re: Timer + autom. Aufwecken des PCs, wenn im Ruhezustand ?

Verfasst: 14.03.2011 17:22
von NicTheQuick
Wake On LAN ist ja etwas anderes. Das kenne ich. Aber in diesem Fall hier wird doch ein Software-Timer gesetzt, oder ist dieser spezielle Timer sozusagen in Hardware gegossen und kann im Grunde nur das System wieder aufwecken? Denn Programm-Code direkt über einen Callback ausführen geht ja während des Ruhezustands nicht, weil der Arbeitsspeicher leer ist und kein Programm enthält, das ausgeführt werden kann.
Verstehe ich das dann richtig, dass dieser spezielle Timer zu einer bestimmten Uhrzeit das System wieder startet und ab einem bestimmten Punkt den Callback dann ausführt?

Re: Timer + autom. Aufwecken des PCs, wenn im Ruhezustand ?

Verfasst: 14.03.2011 18:20
von c4s
Soweit ich mich richtig erinnere muss diese Art von Timer vom Mainboard unterstützt werden, was aber wohl schon seit längerem gang und gäbe ist.

Ich bin gerade dabei zu testen, ob man mittels WaitForSingleObject_() anstatt SleepEx_() den Timer auch abbrechen kann. Könnte das eventuell jemand hiermit nochmal testen:

Code: Alles auswählen

Procedure TimerStart(Void)
	Protected hTimer
	Protected ft.FILETIME

	TimerAbort = #False


	hTimer = CreateWaitableTimer_(#Null, #False, @Title)
	If hTimer
		OpenWaitableTimer_(#TIMER_MODIFY_STATE, #False, @Title)

		LogListAdd("Timer: Created")

		DateToFiletime(AddDate(Date(), #PB_Date_Minute, 1), @ft)  ; Timer should wait 1 minute

		If SetWaitableTimer_(hTimer, @ft, 0, #Null, #Null, #True)
			LogListAdd("Timer: Started")
			If GetLastError_() = #ERROR_NOT_SUPPORTED
				LogListAddError("Info: Waking up not supported")
			EndIf

			Repeat
				Select WaitForSingleObject_(hTimer, 1000) ;;
					Case #WAIT_OBJECT_0  ; Alarm
						LogListAdd("Timer: Finished successfully")
						Break
					Case #WAIT_TIMEOUT  ; Timeout
						If TimerAbort = #True
							CancelWaitableTimer_(hTimer)
							LogListAdd("Timer: Aborted")
							Break
						EndIf
					Case #WAIT_FAILED  ; Error
						Break
				EndSelect
			ForEver
		Else
			LogListAddError("Timer: Not started!")
		EndIf

		CloseHandle_(hTimer)
	Else
		LogListAddError("Timer: Not created!")
	EndIf
EndProcedure

Re: Timer + autom. Aufwecken des PCs, wenn im Ruhezustand ?

Verfasst: 14.03.2011 22:14
von Rudi
c4s hat geschrieben:Hast du den Rechner aus dem Ruhezustand selber wieder gestartet? Nach 1,26 Min.?
Nein! Habe die Zeit auf sechs Minuten eingestellt da der Rechner vier Minuten braucht, um den Inhalt des Arbeitsspeichers auf die Festplatte zu schreiben. Dann habe ich noch etwa zwei Minuten gewartet und den Rechner wieder von Hand gestartet.

Werde jetzt mal den neuen Code testen.

Re: Timer + autom. Aufwecken des PCs, wenn im Ruhezustand ?

Verfasst: 15.03.2011 19:46
von Rudi
So, habe nochmal die neue Procedur getestet. Sie funktioniert genauso wie die erste Variante. Also kein Aufwecken aus dem Hibernate-Modus.
Habe dann noch diverse Bios-Einstellungen getestet - erfolglos.

Es besteht aber noch die Möglichkeit, den Rechner zu einer bestimmten Tageszeit aus dem Aus-Zustand einzuschalten. Dazu wird die entsprechende Funktion im Bios aktiviert und die gewünschte Urzeit eingestellt. Sehr praktisch wäre es, wenn sich dieses über Windows erledigen ließe?!

Nun habe ich den obigen Code aber auch noch auf meinem mindestens zehn Jahre alten Desktop-PC getestet. Hier funktioniert der Code nach Version 1 und 2 unter WinXP sowie WinME tadellos.

Hier die erstellten Logfiles:
v1 Hibernate hat geschrieben:17:37:11 Program: Started
17:37:13 Standby: Activate hibernating via button
17:37:13 Timer: Created
17:37:13 Timer: Started
17:37:13 Standby: Starting
17:37:13 Timer: Created
17:37:13 Timer: Started
17:39:47 Timer: Finished successfully
17:39:59 Standby: Finished
17:39:59 Info: Finished by user input
17:40:09 Program: Closed
v1 Sleep hat geschrieben:17:40:30 Program: Started
17:40:31 Standby: Activate sleeping via button
17:40:31 Standby: Starting
17:40:31 Timer: Created
17:40:31 Timer: Started
17:40:31 Timer: Created
17:40:31 Timer: Started
17:42:32 Timer: Finished successfully
17:42:45 Info: Finished by user input
17:42:45 Standby: Finished
17:42:56 Program: Closed
v2 Hibernate hat geschrieben:17:46:22 Program: Started
17:46:41 Standby: Activate hibernating via button
17:46:41 Standby: Starting
17:46:41 Timer: Created
17:46:41 Timer: Started
17:46:41 Timer: Created
17:46:41 Timer: Started
17:49:14 Timer: Finished successfully
17:49:26 Info: Finished by user input
17:49:26 Standby: Finished
17:49:37 Program: Closed
v2 Sleep hat geschrieben:17:43:30 Program: Started
17:43:33 Standby: Activate sleeping via button
17:43:33 Standby: Starting
17:43:33 Timer: Created
17:43:33 Timer: Started
17:43:33 Timer: Created
17:43:33 Timer: Started
17:45:34 Timer: Finished successfully
17:45:47 Info: Finished by user input
17:45:47 Standby: Finished
17:45:53 Program: Closed

Re: Timer + autom. Aufwecken des PCs, wenn im Ruhezustand ?

Verfasst: 15.03.2011 21:56
von c4s
Hallo Rudi,
Das sieht alles sehr gut aus. Vielen Dank für dein ausführliches Testen!

Ich vermute einfach mal, dass du in der "Energieverwaltung" oder Ähnlichem das deaktiviert hast. Vielleicht unterstützt aber auch dein Mainboard dieses Feature nicht (wobei dann eigentlich eine entsprechende Meldung im Log stehe sollte).

Auf jeden Fall ist es schön von dir nochmal die Bestätigung zu hören, dass man SleepEx_() sorgenlos durch WaitForSingleObject_() ersetzen kann. Das bedeutet nämlich, dass man den Timer ganz einfach auch deaktivieren kann. :allright:

Re: Timer + autom. Aufwecken des PCs, wenn im Ruhezustand ?

Verfasst: 24.03.2011 11:44
von Andreas21
10:35:16 Program: Started
10:35:19 Standby: Activate sleeping via button
10:35:19 Timer: Created
10:35:19 Timer: Started
10:35:19 Standby: Starting
10:35:19 Timer: Created
10:35:19 Timer: Started
10:36:22 Timer: Finished successfully
10:36:25 Standby: Finished
10:36:45 Info: Finished by user input
10:36:57 Standby: Activate sleeping via button
10:36:57 Timer: Created
10:36:57 Timer: Started
10:36:57 Standby: Starting
10:36:57 Timer: Created
10:36:57 Timer: Started
10:37:59 Timer: Finished successfully
10:38:06 Standby: Finished
10:39:37 Info: Finished by user input
10:39:47 Program: Closed
Nur das es der Standby Modus ist und nicht der Ruhezustand.