Waitable Timer: Standby-Problem ;)



  • hi 🙂

    ich will mir nen kleinen wecker proggen, damit ich wieda bissl reinkomm in c++ / winapi ^^. funzt auch ganz gut mit dem timer, er wird zur richtigen zeit ausgelöst, winamp wird auch gestartet... nur wenn der comp im standby ist (und so isses geplant), dann fährt er nach 1 - 2 stunden wieder hoch, egal ob die zeit abgelaufen ist oder nicht, der timer wird jedoch nich ausgelöst 😕.

    hier mein code:

    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    bool set_timer(SYSTEMTIME &systime);
    
    int main() {
    
    	SYSTEMTIME time;
    	time.wYear = 2004;
    	time.wMonth = 3;
    	time.wDay = 23;
    	time.wDayOfWeek = 2;
    	time.wHour = 4;
    	time.wMinute = 45;
    	time.wSecond = 0;
    	time.wMilliseconds = 0;
    
    	// Timer starten
    	if(set_timer(time)) {
    
    		cout << "Timer signaled." << endl;
    		ShellExecute(0, 0, TEXT("D:\\Winamp\\winamp.exe"), TEXT("\"E:\\Music\\Metallica\\Metallica - Turn the page.mp3\""), 0, SW_HIDE);
    	}
    
    	cout << "Press any key to exit..." << endl;
    	cin.ignore();
    
    	return 0;
    }
    
    bool set_timer(SYSTEMTIME &systime) {
    
    	FILETIME filetime;
    	SystemTimeToFileTime(&systime, &filetime);
    	LARGE_INTEGER* time = reinterpret_cast<LARGE_INTEGER*>(&filetime);
    
    	// Timer erstellen
    	HANDLE timer;
    	if(!(timer = CreateWaitableTimer(0, TRUE, TEXT("TestTimer")))) {
    
    		MessageBox(0, TEXT("CreateWaitableTimer failed in set_timer."), TEXT("Error"), MB_OK | MB_ICONERROR);
    		return false;
    	}
    	// Timer starten
    	if(!SetWaitableTimer(timer, time, 0, 0, 0, TRUE)) {
    
    		MessageBox(0, TEXT("SetWaitableTimer failed in set_timer."), TEXT("Error"), MB_OK | MB_ICONERROR);
    		return false;
    	}
    
    	// Auf das Timer-Ereignis warten
    	if(WaitForSingleObject(timer, INFINITE) != WAIT_OBJECT_0) {
    
    		CancelWaitableTimer(timer);
    		CloseHandle(timer);
    
    		MessageBox(0, TEXT("WaitForSingleObject failed in set_timer."), TEXT("Error"), MB_OK | MB_ICONERROR);
    		return false;
    	}
    	else {
    
    		CancelWaitableTimer(timer);
    		CloseHandle(timer);
    
    		return true;
    	}
    }
    

    thx schonmal & cya 🙂



  • Hi,

    ich hab das gleiche problem, allerdings funktionierts wenn der computer im Hibernate ist.

    HeSa


Anmelden zum Antworten