C De Programın Kapanması Eventi
-
Beyler Unload tarzı programın kapanmasına ilişkin bir event falan varmıdır bu c de? Aslında yapmak istediğim şu:
program şifre soracak, 60 saniye içerisinde yazılmassa, yanlış yazılırsa veya program kapatılırsa bilgisayar kapanacak.
?
-
VBDream bunu yazdı:
-----------------------------
Beyler Unload tarzı programın kapanmasına ilişkin bir event falan varmıdır bu c de? Aslında yapmak istediğim şu:
program şifre soracak, 60 saniye içerisinde yazılmassa, yanlış yazılırsa veya program kapatılırsa bilgisayar kapanacak.
?
-----------------------------Bunu sana yazmak isterdim ama sinava calisiyorum suan :) Ama aradigin seylerden biri
atexit() fonksiyonudur. Oncelikle program kapandigi taktirde calismasini istedigin bir fonksiyonu yazarsin mesela void kapandiktanSonraCalis(/*void*/) gibi
ve bu fonksiyonu atexit() in icine parametre olarak verirsin, zaten atexit() icine fonksiyon pointer alir ve cagrimi soyle yapicaksin ornek ;
//burada kutuphanelerin ve kapandiktanSonraCalis
in definition i yada implementasyonu
int main(int argc, char **argv, char **env)
{
atexit(kapandiktanSonraCalis); // bunu yaptiktan sonra programin kapatildiktan sonra kapandiktanSonraCalis, programin bittikten sonra calisir.
// bu fonksiyonla, bir arkadasim denemelik bir program istemisti yollada yaptigi islere bakayim diye :) sonra
// bu fonksiyondan koyup konsola bu programin kendisini silen komutu verince, program kendi kendini silmis gibi olmustu :)
} -
Programi eger ctrl+v ,c ,x gibi uygulaya signal yollayan seylerle interrupt ederse ki linuxta bunu yapariz genelde ozaman signal handling kullanman gerekicek, cok zevklidir :)
http://www.cppreference.com/wiki/c/other/signal
http://www.cs.cf.ac.uk/Dave/C/node24.html
http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_21.html
http://publications.gbdirect.co.uk/c_book/chapter9/signal_handling.html
kolay gelsin, gercekten zevkli seylerde ugrasiyorsun, aklim simdi bu baslikta kalicak :)
-
çok sağol hocam :), vaktin varsa şu 60 sn bekleme olayını nasıl yapıcam söylermisin ? o tür bir bekleme esnasında veri girilebilirmi ayrıca ?
-
bekletmek icin sleep apisini kullanabilirsin dinamik olarak cagir getprocaddress loadlibrarya sleep(60000); veri girisi icin multithreaded yaparsan girebilir yoksa giremez. createthread apisini kullanabilirsin. kernel32.dll User32.dll
-
WH0 bunu yazdı:
-----------------------------
bekletmek icin sleep apisini kullanabilirsin dinamik olarak cagir getprocaddress loadlibrarya sleep(60000); veri girisi icin multithreaded yaparsan girebilir yoksa giremez. createthread apisini kullanabilirsin. kernel32.dll User32.dll
-----------------------------benim sıkıntımda sleep olayında zaten. C ye de yeni başladım o kadar hakim değilim.
-
msdn i kullanabilirsin.bu arada bende javaya basladim... mobile icin. ancak java hic sarmadi.
-
hocam ctrl+c, v , x veya herhangi tuş, tuş kombinasyonu ile çalışıyor fakat fare ile "Kapat" düğmesine basınca çalışmıyor :D
-
VBDream bunu yazdı:
-----------------------------
WH0 bunu yazdı:
-----------------------------
bekletmek icin sleep apisini kullanabilirsin dinamik olarak cagir getprocaddress loadlibrarya sleep(60000); veri girisi icin multithreaded yaparsan girebilir yoksa giremez. createthread apisini kullanabilirsin. kernel32.dll User32.dll
-----------------------------benim sıkıntımda sleep olayında zaten. C ye de yeni başladım o kadar hakim değilim.
-----------------------------VBDream bunu yazdı:
-----------------------------
WH0 bunu yazdı:
-----------------------------
bekletmek icin sleep apisini kullanabilirsin dinamik olarak cagir getprocaddress loadlibrarya sleep(60000); veri girisi icin multithreaded yaparsan girebilir yoksa giremez. createthread apisini kullanabilirsin. kernel32.dll User32.dll
-----------------------------benim sıkıntımda sleep olayında zaten. C ye de yeni başladım o kadar hakim değilim.
-----------------------------C ye yeni basladiysan bu yapmak istedigin nedir dostum, bence yapamazsin ornek kod bulmadan :( Dedigim gibi, signal handling, ve wh0 nun dedigi thread olayini soylicektim birtek orasi kadar uzun surebilir diye ama daha yeniyim diyorsun, forklama, shared memory kullanimi, threadler yaratma, ki https://computing.llnl.gov/tutorials/pthreads/ posix kullanabilirsin linux icin kodluyorsan. bekleme icin wh0 nun dedigi gibi sleep(kacMiliSaniyeBeklesin); diye fonksiyon var basit bir kutuphane icinde var guncel UI i mesgul ediceginden, veri girisini veya saniye saymayi bir thread e koyman gerekir. Soyle olabilir saniye saymadi threadde baslatirsin vs vs.
-
bekleme esnasında veri girilmesini winapi yle yapabilirsin ama baya karışık .Şunu kullanabilirsin
for(i=0;i<=bekleme_suresi*10;i++)
{
Sleep(100); //1 saniyenin 10 da birinde bir kontrol edicek
if (GetAsyncKeyState(0x41)==-32767) //a tuşuna basılırsa 0x41 a nin virtual key code karşılığı
{//a ye basılınca yapılacak işler
}
}
virtual key cod listesine şurdan bakabilirsin
http://msdn.microsoft.com/en-us/library/dd375731%28v=VS.85%29.aspx
edit: windows.h ıda çağırman gerek
-
#include <windows.h> #include <stdio.h> HANDLE g_hThr; DWORD g_dwThrID; DWORD WINAPI thr_wait(LPVOID p); int main(int argc, char* argv[]) { char buff[512]; /*thread yarat. 60 saniye sonra programi kapatsin*/ g_hThr = CreateThread(NULL, 0, thr_wait, NULL, 0, &g_dwThrID); if (g_hThr == NULL) { perror("thread"); return 0; } gets_s(buff, 512);/*sifreyi al ;-)*/ if (strcmp(buff, "Sifre") != 0)/*sifre kontrolu*/ return 0; /*sifre dogruysa akis burda. kapaticak threadi sonlandir.*/ TerminateThread(g_hThr, 0); /*programin kodlari*/ return 0; } DWORD WINAPI thr_wait(LPVOID p) { Sleep(60 * 1000); exit(-1); return 0; }ornek olsun ;-)
