Uygulamamda her 2 saniyede bir tetiklenen ve olay işleyicimi HandleTimerEvent() öğesini çağıran bir TTimer var. HandleTimerEvent() işlevi paylaşılan kaynakları değiştirir ve geri dönmeden önce yürütmek için 10 saniye sürebilir. Ayrıca, zaman zaman işlemciden vazgeçmek için olay işleyicisinde Sleep() işlevini çağırıyorum.TTimer.OnTimer olay işleyicisi yeniden mı?
C++ builder'in TTimer nesnesinin olayları arama konusunda nasıl çalıştığından emin değilim, bu yüzden açıkladığım senaryo, özellikle, önceki bir çağrı gelmeden önce HandleTimerEvent() öğesinin çağrılıp çağrılmadığını düşünmeme neden oldu.
soru şeylerin bir çift için aşağı gelir.
TTimer nesne olayları sıraya mu? Bir önceki çağrı döndürdü önce
TTimer nesne benim olay işleyicisi arayabilir miyim?
+1. Zamanlayıcıyı devre dışı bırakmanın etkinliğini (ya da yapmazsanız neyin yanlış gidebileceğini göstermenin kolaylığını) göstermek için, zamanlayıcı işleyicide bir mesaj kutusu göster. Girişte zamanlayıcıyı devre dışı bırakmazsanız, mesaj kutuları birikecektir. –
Ayrıca, zamanlayıcı olay işleyicisinde reentransı önlemek için boole bayrağı kullanabilirsiniz, ancak zamanlayıcının kendisini devre dışı bırakmak çok daha kolaydır. – dthorpe
TTimer kullanımı için kullanışlı bir TTimerGuard sınıfı olan RAII stili bir sınıf için https://forums.embarcadero.com/thread.jspa?messageID=171751𩻧 adresine bakın. Uygulamanıza bağlı olarak FInterval kullanımını ayarlamanız gerekebilir. –