zamanlayıcı - sayfa 4

 

Böylece OnTimer olaylarının aralığı bir saniyeden az olur.

Ve bazı işlemleri milisaniye cinsinden ölçebilir.

"...( int delay = 0 )" ile olan fikri hiç anlamadım, o yüzden bu saçmalığı yazdım.

 
Yedelkin :
Anladığınız gibi, bu durumda bir sloganım var: "Onlar olmadan yapabilirsen, küçücük bir şey yok." Kullanıcı tarafından seçilen bir süre için ilk Zamanlayıcı olayının oluşturulmasında bir gecikmeye izin vermek için yalnızca terminal düzeyinde gereklidir. Aynı zamanda, özellikle görmediğim için kodunuzun önemi için yalvarmıyorum.

İlk etkinliğin gecikmesini zamanlayıcıdan nasıl organize etmeyi hayal ediyorsunuz?

Aynı ikinci zamanlayıcı terminalde başlatılacak ve belirli bir anda Expert Advisor için zamanlayıcı olayları oluşturulacaktır. Her şey daha önce önerdiğimle tamamen aynı.

 
stringo :

İlk etkinliğin gecikmesini zamanlayıcıdan nasıl organize etmeyi hayal ediyorsunuz?

Aynı ikinci zamanlayıcı terminalde başlatılacak ve belirli bir anda Expert Advisor için zamanlayıcı olayları oluşturulacaktır. Her şey daha önce önerdiğimle tamamen aynı.

Yani sunuyorum. OnInit()'te EventSetTimer(14400, 7029) işlevini bulan terminal, dahili ikinci zamanlayıcıyı etkinleştirir ve kullanıcının istediği gibi program başladıktan tam olarak 7029 saniye sonra (diyelim 12-00'de) ilk Zamanlayıcı olayını oluşturur. Ayrıca, Zamanlayıcı olayları her dört saatte bir oluşturulacaktır. 13399 Zamanlayıcı olayının kullanıcı için herhangi bir anlamsal yük taşımadığı 14400 olay değil, 4 saatte bir olay.

Bu yaklaşım, benim görüşüme göre, önerdiğinizden temelde farklıdır. Çünkü benim versiyonumda, dahili ikinci zamanlayıcı (7029 saniyeyi sayar) EA başlatıldıktan sonra yalnızca sınırlı bir süre için çalışacak ve olay kuyruğunu tıkamadan çalışmayı durduracaktır. Sürümünüz, Expert Advisor'ın çalışmasının ilk dakikasından son dakikasına kadar her saniye olayın sürekli olarak oluşturulmasını sağlar ve yalnızca her 14400'üncü olay kullanıcı için en azından bir miktar ağırlığa sahip olacaktır.
 
pusheax :

Böylece OnTimer olaylarının aralığı bir saniyeden az olur.

Ve bazı işlemleri milisaniye cinsinden ölçebilir.

Aslında, geçerli parametre " int    saniye        // saniye sayısı", bazı "OnTimer için gecikmeler" değil, zamanlayıcıdaki olayların oluşma sıklığını belirler. Malzemeyi öğrenin. Milisaniye olarak, en azından önce konunun ilk sayfasını okudunuz.

pusheax :

"...( int delay = 0 )" ile olan fikri hiç anlamadım, o yüzden bu saçmalığı yazdım.


Açık. "Sadece anlamadan patlak vermek için" dizisinden. Hiçbir şey olmuyor :) Hepimiz bazen güzellik vizyonumuzu başkalarıyla paylaşmaya çalışıyoruz.

 
Yedelkin :

Yani sunuyorum. OnInit()'te EventSetTimer(14400, 7029) işlevini bulan terminal, dahili ikinci zamanlayıcıyı etkinleştirir ve kullanıcının istediği gibi program başladıktan tam olarak 7029 saniye sonra (örneğin, 12-00'de) ilk Zamanlayıcı olayını oluşturur. Ayrıca, Zamanlayıcı olayları her dört saatte bir oluşturulacaktır. 13399 Zamanlayıcı olayının kullanıcı için herhangi bir anlamsal yük taşımadığı 14400 olay değil, 4 saatte bir olay.

Bu yaklaşım, benim görüşüme göre, önerdiğinizden temelde farklıdır. Çünkü benim versiyonumda, dahili ikinci zamanlayıcı (7029 saniyeyi sayar) EA başlatıldıktan sonra yalnızca sınırlı bir süre için çalışacak ve olay kuyruğunu tıkamadan çalışmayı durduracaktır. Sürümünüz, Expert Advisor'ın çalışmasının ilk dakikasından son dakikasına kadar her saniye olayın sürekli olarak oluşturulmasını sağlar ve yalnızca her 14400'üncü olay kullanıcı için en azından bir miktar ağırlığa sahip olacaktır.

Tamam

OnInit işlevinde, zamanlayıcı EventSetTimer(7029);

OnTimer işlevinde, ilk girişte, önceki EventKillTimer() zamanlayıcısını devre dışı bırakın ve yeni bir EventSetTimer (1440) başlatın;

 
stringo :

OnTimer işlevinde, ilk girişte, önceki EventKillTimer() zamanlayıcısını devre dışı bırakın ve yeni bir EventSetTimer (1440) başlatın;

Ve iyi çalışacak mı? Birisi çok uzun zaman önce EventSetTimer işlevinin aslında init'ten tek bir çağrı için tasarlandığını söyledi.
 
stringo :

Tamam

OnInit işlevinde, zamanlayıcı EventSetTimer(7029);

OnTimer işlevinde, ilk girişte, önceki EventKillTimer() zamanlayıcısını devre dışı bırakın ve yeni bir EventSetTimer (1440) başlatın;

Ah, tünelin ucundaki ışık! OnTimer( ) içinde EventSetTimer() çağırılsın mı? Terminale gittiğimde mutlaka deneyeceğim. Şık çözüm için teşekkürler!
 
TheXpert :
Ve iyi çalışacak mı? Birisi çok uzun zaman önce EventSetTimer işlevinin aslında init'ten tek bir çağrı için tasarlandığını söyledi.
söyledim. Bu yaygın bir uygulamadır. Bu egzotik olanı hiç iptal etmez (eğer arzu ederseniz)
 
stringo :

TAMAM

OnInit işlevinde, zamanlayıcı EventSetTimer(7029);

OnTimer işlevinde, ilk girişte, önceki EventKillTimer() zamanlayıcısını devre dışı bırakın ve yeni bir EventSetTimer (1440) başlatın;

Antik çağlardan beri yaptığım şey bu. Ancak, bu yaklaşım test cihazında bir kerede işe yaramadı. Test cihazında sayaçlara geçtim.

Ama hepsi şiir. Gerçekten milisaniye istiyorum. dileklerine katılıyorum.

Şimdi geçici bir durumum var ve 100 ms'lik bir kesintiye ihtiyacım var, ancak şu anda sabırsız ve yarın için neyin sabırsız olduğunu hala bilmiyorum. Böyle yüksek bir çözünürlük eşiğine sahip olmak istemem, 1000 ms bir şekilde çok kalın. Milisaniye standarttır. Birisi kuyruğu aptalca kendisi için doldurursa - bu onun trajedisi (ek olarak terminalle birlikte programı çökertmenin her zaman çok uygun fiyatlı yolları vardır). Bir şekilde neyin mümkün olup neyin olmadığını anlayacağız. :)

 

Milisaniyelere geçmek artık mümkün değil.

Halihazırda yazılmış olan kaç Uzman Danışman , yazarın amaçladığından 1000 kat daha fazla zamanlayıcı olayı oluşturmaya başlayacak?