Forum: D Programlama Dili RSS
D ile bağlı USB'leri nasıl kontrol edebilirim?
agora #1
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: D ile bağlı USB'leri nasıl kontrol edebilirim?
Selam. Sınavlar bitti ben de çok sık konu açmaya başladım baya sıkıcı olduğumu hissetmeye başladım :/ Neyse sadede geleyim :D

Linux ve Windows her 2 sistemde de bağlı USB'leri D ile nasıl kontrol edebilirim?

Sanırım linux için /dev/usb/ içerisine bakmak gerekiyordu.

Ama windowsta bunun için tam bir muamma. Bilemiyorum. Biraz baktım google'dan ama tam anlayamadım.

Bağlı USB'nin boyutunu, içerisindeki dosyaları almam gerekiyor. Aslında sorun da burada başladı. Burada hangi API'ler kullanilir ve D'nin bunun icin kendine has API'ları var mı?

Arama yaptım şu başlığa ulaştım

http://forum.dlang.org/thread/bt3qtk$2dod$1@digitaldaemon.com
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
USB derken bütün USB aygıtlarını mı düşünüyorsun yoksa yalnızca diskleri mi? Eğer yalnızca diskse usb disk, windows, win32 gibi arama sözcükleri kullanılabilir. libusb diye bir kütüphane var ama ben hiç kullanmadım.

Ali
agora #3
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Takili USB aygitlari ve sonradan takilan USB aygitlari.

Flash Bellek dedigimiz aygitlar sonradan takiliyorlar ve bunu es zamanli olarak gormek mumkun mu? Dersaneye baktim orada es zamanli programlama var. Oraya daha gelmedim ama tam zamanli olarak flash bellegi algilatabilir miyim?
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ne yazık ki bana çok yabancı konular. :-/

Ama eş zamanlı programlama dediğimiz konu ile doğrudan ilgili değil çünkü eş zamanlı programlamayı concurrency'nin karşıtı olarak seçmiştik.

Tabii, std.concurrency'yi kullanarak bir iş parçacığı başlatabilirsin ve o işçi belirli aralıklarla USB aygıtlarını gözden geçirebilir ama bu konu doğrudan ilgili değil.

Ali
agora #5
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hocam denemedim ama bir sey sorucam tabletteyim su an kusura bakmayin :/

simdiki zamani alip 2 saniye sonrasini da alsam her 2 saniyede bir surekli ornegin logicaldisk ile gelen diskleri kontrol ettirsem?

bu sistemi yorar mi?

while(saniye<3)
{
    if(saniye <= 3) { diskleriKontrolEt() }
}

gibi bir mantik calisir mi sizce?
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #3
O while(saniye < 3) denetimi sürekli işleyeceği için çekirdeklerden birisi %100 çalışır. Arada bir süre bekletmen gerekir. (Örneğin, Thread.sleep ile).
import std.stdio;
import core.thread;
 
void diskleriKontrolEt()
{
    writeln("Kontrol ediyorum");
}
 
void main()
{
    while (true) {
        diskleriKontrolEt();
        Thread.sleep(3.seconds);
    }
}
Ali
agora #7
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yani bu şekilde de bir timer görevi görebiliriz sanirim hocam?

Bu yol yani bahsettiğiniz sanırım yük olmaktan çıkar?
acehreli (Moderatör) #8
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Evet, yük olmaktan çıkar çünkü Thread.sleep, bu iş parçacığının bir süre işi olmadığını bildirir. İşletim sistemi de başka bir iş parçacığını bizim çekirdekte işletmeye geçer.

Ali
agora #9
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hocam o zaman while bir iş parçacığı tetikliyor? Bir bakıma ihtiyaç duyulduğunda iş parçacığının kendisi oluyor sanırım?

Thread.sleep içinde bulunduğu iş parçacığını 3 saniyeliğine sonlandırıyor?

Peki Thread.sleep hala while'ın içindeyse o zaman iş parçacığı hala while için çalışıyor mu demeliyiz? Bu durumda çünkü while'dan henüz çıkılmamış?

Biraz o kafamı karıştırdı da :) Teşekkür ederim.
acehreli (Moderatör) #10
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Hayır, while iş parçacığı tetiklemiyor. O while, şu anda işlemekte olan iş parçacığının işi olarak devam ediyor. Program başladığında main()'i işletmekte olan tek iş parçacığı vardır. Dolayısıyla, Thread.sleep bizim programı bekletmiş oluyor.

Eğer bir iş parçacığı bir yandan iş yaparken başka birisinin arada bir diskleriKontrolEt() yapmasını istiyorsan en az iki iş parçacığının olması gerekir. Bakınız: :)

  http://ddili.org/ders/d/es_zamanli.html

Ali
agora #11
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Aslinda henuz o konulara gelmemistim ama madem merak ettik :) Okumak guzel olur :)

Sagolun hocam bu dört çekirdekli, çift çekirdekli pc'lerde fark ediyor sanırım?
acehreli (Moderatör) #12
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
agora:
bu dört çekirdekli, çift çekirdekli pc'lerde fark ediyor sanırım?

Aslında, hayır. İşletim sistemi o anda işlemekte olan yüzlerce programın bütün iş parçacıklarını tek bile olsa mevcut çekirdekler üzerinde işletir. Thread.sleep ile kendisi duraksamayan iş parçacıkları işleme adımı süresi dolunca işletim sistemi tarafından otomatik olarak duraksatılır. Sonra başka bir iş parçacığına geçilir.

Ali
agora #13
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkür ederim hocam ama yine bu şekilde kullanılıyor sanırım çekirdekler?

Teşekkürler valla iyi sabırlısınız bana karşı :d
acehreli (Moderatör) #14
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Son söylediğini anlamadım.

Sen "dört çekirdekli, çift çekirdekli pc'lerde fark ediyor sanırım" demiştin. Neyi kasdettiğini bilmiyorum ama ne programcı için bir şey farkeder ne de programın davranışı konusunda fark vardır.

Her program tek iş parçacığı ile başlar ve isterse başka iş parçacıkları başlatabilir. Belirli bir anda, o sırada işlemekte olan onlarca programın yüzlerce iş parçacığı etkin olabilir.

İşletim sistemi o iş parçacıklarını belirli sürelerde teker teker işletir ve tekrar duraksatır. Biz kesintisiz işliyormuş gibi hissedebiliriz ama aslında her program bir kaç on milisaniye işledikten sonra durdurulur ve tekrar başlatılır.

Gördüğün gibi, buraya kadar çekirdeğin sözünü bile etmedik. Senin ilk gösterdiğin while() döngüsü ne olursa olsun bir çekirdeğin %100 meşgul olmasına neden olur. Bunu kesinlikle deneyerek görmelisin. ;)

Ali
agora #15
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
İyi sabrediyorsunuz hocam bunalmadan bu kadar soruma karşı demek istemiştim :D

Ben iş parçacıklarının sayısının çekirdek sayısına göre değişiklik gösterdiğini sormuştum.

while döngüsünü denedim. Programı sonlandırırken bilgisayarım kasma yaşadı sadece :)
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-22, 07:00:33 (UTC -08:00)