void eventTimer()
{
while(1)//bir değişkenede bağlanabilir
{
int vMinute = getMinute();
int vHour = getHour();
int vDay = getDay();
int foo[5] = {5,15,20,25,30};
for(int i = 0;i<5;i++)
{
if(foo[i] == vDay)
{
if(checkHour(vHour,vMinute) == true)
{
//do something
}
}
}
Sleep(1000);
}
}
bool checkHour(int vHour,int vMinute)
{
int foo[9] = {3,5,9,12,15,17,20,22,23};
for(int i = 0;i<9;i++){
if(foo[i] == vHour && vMinute == 0)//isteğe göre değiştirilebilir
return true;
}
return false;
}
void startTimer()
{
CreateThread(NULL,NULL, (LPTHREAD_START_ROUTINE)&eventTimer, NULL, NULL, NULL) ;
//bu şekilde olabilir veya birden fazla thread çalışacaksa bir sınıf yazıp threadleri ordan nesne oluşturup bir vectore atayıp kontrolde edebilirsin
//linuxta createthread yerine pthread_create olması gerekiyor kendiniz ayarlarsınız get minute,hour ve day fonksiyonlarını örnek olarak yazdım içlerini doldurursunuz
}Edit:eventTimer fonksiyonundaki while içine Sleep(1000) koymayı unutmuşum koyulmazsa cpu sömürür
Büyük çaplı projede sleep kullanmak zararlı mı ?[c++]
24
●1.678
- 08-12-2015, 13:56:14Kimlik doğrulama veya yönetimden onay bekliyor.
- 12-12-2015, 01:38:26Kimlik doğrulama veya yönetimden onay bekliyor.Bu da bir online oyun zaten o yüzden en az yoracak şekilde yapmam gerekiyor. Şimdi benim düşünceme göre, olayın client ile alakası olmayacak. Clientle herhangi bir veri alışverişine gerek yok, sunucunun saatini baz alarak işlemleri yapacak. Zaten yapılan işlemler oyuncuyu ilgilendirmiyor, server tarafında yapılması gereken şeyler olduğu için tek taraflı yapmak yeterli. Bir fikriniz var mı ?barisceviz adlı üyeden alıntı: mesajı görüntüle
Emek harcamışsın teşekkürler. Peki bu şekilde bahsettiğim binlerce kişilik bir oyunda sıkıntı yapar mı ? Oyunun kendi dosyalarında sadece 2 sleep var o yüzden kullanıp kullanmamakta kararsızım bunuSexClub adlı üyeden alıntı: mesajı görüntüle
- 13-12-2015, 13:48:10İnceledim ama malesef işime yaramaz. Oyuna dışardan komut verirsem resetler sonra aktif eder. Oyunun kaynağına, c++ diliyle eklemem gerekiyor.asoza adlı üyeden alıntı: mesajı görüntüle
- 13-12-2015, 17:57:55Ne timer'ı ne sleep'i arkadaşlar. Yapacağın iş sadece şu aktif olmasını istediğin kodu
if(date > startDate && date < endDate)
{
//active
}
Complex düşünmeye gerek yok server bazlıda olsa client da da aynı bu kodu koyup server tarfındada aynı bu kodu koyarak halledebilirsin - 13-12-2015, 18:30:08lyzerk adlı üyeden alıntı: mesajı görüntüle
Client ve server tarafında saati denk getiremezsin, saat farkları olacak her zaman. Ayrıca date demişsin de hocam nasıl almayı düşünüyorsun date ?
Dev bir projeden bahsediyoruz kod oraya gelecek saate bakacak ve geçip gidecek bir daha gelmeyecek. Yani kod geldiği anda saat tutarsa işlemi yapar yok tutmazsa bir daha sunucu resetlenene kadar kod aktifleşmez.
Date sürekli kontrolü için de sleep'e muhtaç kalıyoruz o yüzden alternatif arıyorum
düzenleme:
Not: Eğer her oyuncu-sunucu etkileşiminde kontrol edelim diyorsanız bu sefer de aynı anda denk gelecek olursa işlemi birden fazla tekrarlayacak yoksa o sistemle yapmak çok basit 4 satır kodla bitiyor iş. - 14-12-2015, 00:40:54hocam yazdığım şeklinden biraz daha gelişmiş halini knight online adlı oyun kullanıyor zaten şu güne kadar bir sıkıntı çıkartmadıadme adlı üyeden alıntı: mesajı görüntüle
- 14-12-2015, 09:14:57kaynak kodları nerden buldun ko'nun ?SexClub adlı üyeden alıntı: mesajı görüntüle
- 14-12-2015, 09:58:31Saat farkı olsun ne olucak alırsın GMT'ye göre client'da kontrol edersin. Sen projenin herhangi bi yerine sleep koyarak projeyi zaten daha fazla tehlikeye atıyosun ki date'in alınımına takılmışsın bu kodu yazmadan önce date = time(0); ile alırsın, al sana date. Zaman gerektiren durumlarda bu şekilde bi kod kullanmak ne projeyi tehlikeye sokar ne sizi. Biraz yazılım bilginiz varsa zaten bunu kolaylıkla yaparsınız.adme adlı üyeden alıntı: mesajı görüntüle
İyi çalışmalar.