Ładny brzuch
Potrafie zresetowa komputer w C++ ale nie potrafie opuni tego. Czy kto wie jak to zrobi ?
Funkcja Sleep(1000) zatrzymuje dziaanie programu na 1 sekund...moesz moesz rwnie zaininicjowa timerka... ;)
Pozdrawiam
Funkcja Sleep(1000) zatrzymuje dziaanie programu na 1 sekund...moesz moesz rwnie zaininicjowa timerka... ;)
Hmm moesz zastowa funckj Sleep, tylko pamitaj e przyjmuje ona liczb w milisekudach...w tym przypadku bdzie to 60 min 1 min - > 60 sekund 1 sekunda to 1000 milisekund...czyli 360 * 1000, czy co takiego ;) Moesz rwnie pobra aktualn godzin i sprawdza w timerze, czy doszo ju do odowiedniego momentu (godzina mina)..w tym przypadku bdziesz musia zainicjowa timerka..SetTimer no i potem KillTimer..cao musisz obsuy w komuniacie WM_TIMER...jak co nie jasne to pisuj ;) Aha do pobierania daty i godziny moesz uzy strukturki SYSTEMTIME i pobiera dane za pomoc GetLocalTime.
pozdrawiam
hmm.. wiesz co moze podasz mi jakis przyklad na wykorzystanie timera np wypisanie czegos po 1 min.
Sleep dziala :)
Uytkownik n1x0n edytowa ten post 15 kwiecie 2005, 14:45
Oczywicie ;)
Timerki s zaprojektowane w aplikacjach okienkowych, co za tym idzie? Musimy tak stworzy...a wic piszemy sobie
# include <windows.h> //deklaracja procdeury okienkowej LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); char szClassName[ ] = "nameofclass"; char szAppName [ ] = "nameofprogram"; HWND hwnd; HINSTANCE hInstance; int SizeX = 200, SizeY = 200; RECT rcDesk; # define ID_TIMER 1000 //gwna funkcja - co takiego jak main w konsolowych int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { MSG messages; WNDCLASSEX wincl; GetWindowRect(GetDesktopWindow(), &rcDesk); //struktura opisujca wincl.hInstance = hInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; if (!RegisterClassEx (&wincl)) return 0; //tworzymy okno hwnd = CreateWindowEx ( 0, szClassName, szAppName, WS_OVERLAPPEDWINDOW ^ WS_SIZEBOX ^ WS_MAXIMIZEBOX, (rcDesk.right - SizeX) / 2, (rcDesk.bottom - SizeY) / 2, SizeX, SizeY, NULL, NULL, hInstance, NULL ); ShowWindow (hwnd, SW_HIDE); //chowamy okno bo nam nie jest potrzebne;) while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam; } //obsuga zdarze okna - procedura okienkowa LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: SetTimer(hwnd, ID_TIMER, 1000 * 60, NULL); //towrzymy timer break; case WM_TIMER: if(wParam == ID_TIMER) { //tutaj akcja, ktra ma by wykonana po minucie //jak chcesz eb byo wykonane jednorazowo to w takim wypadku zniszcz timer funkcj KillTimer. } break; case WM_DESTROY: KillTimer(hwnd, ID_TIMER); //to jest wanie niszczenie timera PostQuitMessage (0); break; default: return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
Jak masz jakie pytania to wal miao...lub obacz se stronk winapi.org, gdzie jest opisywane programowanie z wykorzystaniem winapi ;)
//dopisano
mimo wszystko najefektywniejszym sposobem bdzie stworzenie pustego zdarzenia i wywoanie funkcji, ktra bdzie go oczekiwa:
HANDLE h; //uchwyt do zdarzenia h = CreateEvent(0, TRUE, FALSE, "opoznienie"); //stworzenie pustego zdarzenia WaitForSingleObject(h, 1000 * 60); //czeka minut na wykonanie zdarzenia, ktre jest puste
Za pomoc takiego rozwizania nie zeramy duo zasobw, jak to si dzieje np. podczas wywoywania funkcji Sleep...
//
pozdrawiam
Uytkownik codeguy edytowa ten post 15 kwiecie 2005, 15:37
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Funkcja Sleep(1000) zatrzymuje dziaanie programu na 1 sekund...moesz moesz rwnie zaininicjowa timerka... ;)
Pozdrawiam
Funkcja Sleep(1000) zatrzymuje dziaanie programu na 1 sekund...moesz moesz rwnie zaininicjowa timerka... ;)

Hmm moesz zastowa funckj Sleep, tylko pamitaj e przyjmuje ona liczb w milisekudach...w tym przypadku bdzie to 60 min 1 min - > 60 sekund 1 sekunda to 1000 milisekund...czyli 360 * 1000, czy co takiego ;) Moesz rwnie pobra aktualn godzin i sprawdza w timerze, czy doszo ju do odowiedniego momentu (godzina mina)..w tym przypadku bdziesz musia zainicjowa timerka..SetTimer no i potem KillTimer..cao musisz obsuy w komuniacie WM_TIMER...jak co nie jasne to pisuj ;) Aha do pobierania daty i godziny moesz uzy strukturki SYSTEMTIME i pobiera dane za pomoc GetLocalTime.
pozdrawiam
hmm.. wiesz co moze podasz mi jakis przyklad na wykorzystanie timera np wypisanie czegos po 1 min.
Sleep dziala :)
Uytkownik n1x0n edytowa ten post 15 kwiecie 2005, 14:45
Oczywicie ;)
Timerki s zaprojektowane w aplikacjach okienkowych, co za tym idzie? Musimy tak stworzy...a wic piszemy sobie
# include <windows.h> //deklaracja procdeury okienkowej LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); char szClassName[ ] = "nameofclass"; char szAppName [ ] = "nameofprogram"; HWND hwnd; HINSTANCE hInstance; int SizeX = 200, SizeY = 200; RECT rcDesk; # define ID_TIMER 1000 //gwna funkcja - co takiego jak main w konsolowych int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { MSG messages; WNDCLASSEX wincl; GetWindowRect(GetDesktopWindow(), &rcDesk); //struktura opisujca wincl.hInstance = hInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; if (!RegisterClassEx (&wincl)) return 0; //tworzymy okno hwnd = CreateWindowEx ( 0, szClassName, szAppName, WS_OVERLAPPEDWINDOW ^ WS_SIZEBOX ^ WS_MAXIMIZEBOX, (rcDesk.right - SizeX) / 2, (rcDesk.bottom - SizeY) / 2, SizeX, SizeY, NULL, NULL, hInstance, NULL ); ShowWindow (hwnd, SW_HIDE); //chowamy okno bo nam nie jest potrzebne;) while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam; } //obsuga zdarze okna - procedura okienkowa LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: SetTimer(hwnd, ID_TIMER, 1000 * 60, NULL); //towrzymy timer break; case WM_TIMER: if(wParam == ID_TIMER) { //tutaj akcja, ktra ma by wykonana po minucie //jak chcesz eb byo wykonane jednorazowo to w takim wypadku zniszcz timer funkcj KillTimer. } break; case WM_DESTROY: KillTimer(hwnd, ID_TIMER); //to jest wanie niszczenie timera PostQuitMessage (0); break; default: return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
Jak masz jakie pytania to wal miao...lub obacz se stronk winapi.org, gdzie jest opisywane programowanie z wykorzystaniem winapi ;)
//dopisano
mimo wszystko najefektywniejszym sposobem bdzie stworzenie pustego zdarzenia i wywoanie funkcji, ktra bdzie go oczekiwa:
HANDLE h; //uchwyt do zdarzenia h = CreateEvent(0, TRUE, FALSE, "opoznienie"); //stworzenie pustego zdarzenia WaitForSingleObject(h, 1000 * 60); //czeka minut na wykonanie zdarzenia, ktre jest puste
Za pomoc takiego rozwizania nie zeramy duo zasobw, jak to si dzieje np. podczas wywoywania funkcji Sleep...
//
pozdrawiam
Uytkownik codeguy edytowa ten post 15 kwiecie 2005, 15:37