Tam Sürümünü Görmek İçin : şu kadar saniye bekleme
PlayG7SeveN
19/05/2007, 19:35
c++
5 saniye beklemek istiyorum... bunun fonksiyonu neydiii .. hangi kütüphane kullanmlıyız.
bunun için sleep() işlevi vardı sanırım. kullandığınız derleyiciye göre internette arama yapabilirsiniz.
sekizbit
19/05/2007, 19:51
Merhaba, eezgu nun da belirttiği gibi bunun için sleep diye bir işlev var sleep(integer) ; olarak kullanilir. içine yazilan değer beklemek istediğiniz sürenin mili saniye cinsinden karşılığı olmalıdır.
#include <time.h> bunu da include etmeniz gerekir.
aslında işlev olarak basit bir yapısı vardır. google dan da kolayca bulabileiceğiniz gibi
void sleep(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}
o anki saat ile içine giren zaman büyüklüğünü toplar, makinenin saati, elde edilen sonuçtan küçük olduğu sürece bir döngü oluşturur.
acehreli
19/05/2007, 22:21
sekizbit, senin verdigin islev islemcinin %100 kapasitede calismasini gerektirir. Dikkat edersen orada aslinda bir bekleme yok. Bu program surekli olarak bir is yapiyor.
Onun yerine, bu isletim dizisini (thread) gercekten durduracak bir islev cagirmak gerekir. Bunun birden cok yolu var. Windows'da Sleep olmasi gerek. (Basi buyuk S...) Unix ortamlarinda da pause/setitimer ikilisi olabilir. Baska olanaklarin oldugunu da biliyorum ama simde hatirlamiyorum.
Ali
while yada for döngüsüyle sistemi oyalamak daha doğrusu işlemciyi meşgul etmek bir yöntem, d,ğeri acehrelinin dediği gibi işletim sistemine bağlı kesmeleri kullanmak. Ama çok gereklimidir acaba?
http://www.maxiasp.net/y_multithread_uygulama_gelistirmek.aspx
örnekte ki kod bahsettiğinize yakın mıdır acaba?
acehreli
20/05/2007, 00:39
mr_c, evet, sistemi oyalamayan yontemler gercekten cok onemli. Aksi taktirde, son derece onemsiz bir kac program sistemi cokertirlerdi.
Iki tane oyle programin ekranlarinda bir seyi 5 saniyede bir degistirdiklerini dusun... Onlarin yuzunden tum sistemin geri kalanina islemci gucu kalmaz. Cok kaba bir hesapla, o programlar islemcinin gucunun %66'sini harcarlar, diger programlarin hepsi de birden geri kalan %33 icin yarisirlardi.
Ali
acehreli
20/05/2007, 00:56
O hesapta yanlisliklar var tabii. Sizi denemek icin yazmistim. :p (Yalan!)
Soyle diyelim: iki tane 5 saniyede bir ekranini degistiren program, bir tane de cok onemli program. Yine kaba bir hesapla, onemli programa %33 zaman kalir.
Ali
sekizbit
20/05/2007, 01:45
Tabiki söylediğiniz doğru, yazılımı döngü ile bekletmek performans kaybına yol açıyor. ama hesabınız yine yanlış :) Eğer herangi bir döngü, işlemcinin %33 ünü kullanabiliyo olsaydı bilgisayarımızda basit 5 yazılımdan fazlasını kullanamazdık. bugün kullandığımız modern işlemcilerde sadece mantıksal sınama yapan bir döngünün, işlemcideki önemi çok düşük.
Az önce denedim %1 lik bir fark zar zor yaratıyor işlemcimde :)
Tabiki benim için şu anda %1 in bir önemi yok ama ciddi bir projede çok şey kaybettirir bu gecikme. Ama yinede küçük bir işlem için kodun taşınabilirliğini elden kaybetmemek için ben bunu kullanırım :)
Sizin teriminizle "Modern İşletim Sistemleri" for döngüleri gibi işlemciyi esir alan döngüleri bile durdurabiliyor ve diğer process lere de zaman dilimi ayıramıyor mu? ;)
İşlemci yüzdesine göre hesap yapmak ne kadar doğru 1GHz işlemcinin %5 i ile 3Ghz işlemcinin %5 i aynı işlem sayısına tekabül etmez gibi geldi bana ;)
sekizbit
20/05/2007, 02:02
Ben modern işlemcilerden bahsetmiştim. Pek çoğumuz artık baya güçlü işlemciler kullanıyoruz yani ufak tefek işlemlerin pek kayıplara yol açmadığı işlemciler.
Tabiki sizin dediğinize itiraz etmiyorum, kayıp herzaman kayıptır. Profosyonel bir işlemde en basitinden işi biten değişkenler bile bellekten silinmelidir. Ancak basit bir işlemde, küçük projelerde kodun platformdan bağımsı yazılması bence çok önemli.
Kendi açımdan söylemem gerekirse ben c++ ta veya c de çok ileri değilim, ama en kalıcı şekilde öğrenmek için her zaman standar kütüphaneleri kullanmaya çalışıyorum.
Ben modern işlemcilerden bahsetmiştim. Pek çoğumuz artık baya güçlü işlemciler kullanıyoruz yani ufak tefek işlemlerin pek kayıplara yol açmadığı işlemciler.
Soru ali bey e idi terimi kendisi daha çok kullanıyorda.
Euclides
20/05/2007, 02:45
bugün kullandığımız modern işlemcilerde sadece mantıksal sınama yapan bir döngünün, işlemcideki önemi çok düşük.
Az önce denedim %1 lik bir fark zar zor yaratıyor işlemcimde
Sanıırm 100 - 1 = 99 demek istediniz...
Bakınız ekteki dosya...
her "go" tuşuna basışınız 1 adet sadece 1 tek mantıksal doğruluk kontrolu yapan thread doğrur(ve bu thread devamlı aynı kontrole devam eder)
Ben modern işlemcilerden bahsetmiştim. Pek çoğumuz artık baya güçlü işlemciler kullanıyoruz yani ufak tefek işlemlerin pek kayıplara yol açmadığı işlemciler.
Hâla bu kadar "modern" işlemciler yok. bugün kü "modern"'lerin eskilerinden farkı çok hızlı olmaları, henüz "ufak tefek" operasyonlardan -ufak ne demekse ?- büyüklerini ayırt edemedikleri için siz ufak işlemler verince tüm güçleri ile onu yapıyorlar... tüm vakitlerini ona harcıyorlar... oysa ki işlem ufak değil mi... !?
Eğer herangi bir döngü, işlemcinin %33 ünü kullanabiliyo olsaydı bilgisayarımızda basit 5 yazılımdan fazlasını kullanamazdık.
Eğer birkaç kez "Go!"!a basarsanız (her basışınız 1 thread yaratır) cpu işlem kapasitesinin o threadlar arasında bölündüğü görebilirsiniz
Tıpkı Ali beyin de değindiği gibi...
(bakınız screenshot)
http://img442.imageshack.us/img442/2016/untitled1iq5.jpg
sekizbit
20/05/2007, 03:13
anlayamadığım birşey var, sizin gönderdiğiniz yazılımda GO tuşuna 4 defa bastığımda işlemci kullanımım %100 olurken , içinde az önceki sleep döngüsü bulunan programdan 10 tane çalıştırmama rağmen %8 ' i geçemiyorum.
acehreli
20/05/2007, 04:05
Benim tahminim soyle: clock islemi kendisi iceride bir beklemeye neden oluyor. Bir sleep orneginin de bulundu clock'in su belgesine baktim:
http://msdn2.microsoft.com/en-us/library/4e2ess30(VS.71).aspx
Anlasilan clock'in duyarliligi 1/CLOCKS_PER_SEC kadar. Yani sonucu ancak o kadar degisiklik gosteriyor. Eger onun gerceklestirilmesinde o kadar surelik bir "bekleme" islemi uygulandiysa, is benim ve Euclides'in dusundugu kadar kotu degilmis.
Zaten clock'in sleep islevine uygunlugunu Microsoft da destekliyor. :)
Ancaaak! :D Acaba tasinabilir oldugu icin sevdigimiz clock her ortamda yukaridaki sleep'i gerceklestirmede kabul edilir sonuc veriyor mu? Bence ise yariyordur... (?)
Ali
sekizbit
20/05/2007, 04:10
evet haklısınız, sleep işlemi (yanlış anlamadıysam) kendi içindeki beklemden dolayı döngüyü ve dolayısı ile işlemciyi okadar çok meşgül etmiyor.
myavuzselim
20/05/2007, 10:21
Zaten clock'in sleep islevine uygunlugunu Microsoft da destekliyor. :)
Ancaaak! :D Acaba tasinabilir oldugu icin sevdigimiz clock her ortamda yukaridaki sleep'i gerceklestirmede kabul edilir sonuc veriyor mu? Bence ise yariyordur... (?)
Ali
Linux 2.6.20-15-386, gcc 4.1.2 ile sistemin %70'ini kullaniyor.
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.