Init() ve DeInit() yürütme sırası - sayfa 24

 
fxsaber :
Üzerinde çalıştığınız örnek, tartışılan soruna tam olarak uymadı. UninitializeReason çözümüne sahip olmayacak başka bir örnek göstermek mümkündür.

İşte bu, bu diyaloğu kesiyorum. Kulak kaşınmasını tartışmanın amacı nedir? Kodunuzu kullanmak için başka bir çözüm olmayacak, ancak genellik her zaman bir sorun için ideal çözüm değildir.

Örneğin 1 ahududu çalısı kesmek kimsenin aklına bir oduncu tugayı çağırmak gelmez. Yani kodunuz, bir ahududu çalısını kesmek için bir oduncu ekibiyle karşılaştırılabilir.

Saygılarımla, Alex.

 
Eski DeInit ve yeni OnInit farklı iş parçacıklarında mı yürütülüyor anlamıyorum, OnInit'teki sorun nedir, DeInit'in başlamasını ve tamamlanmasını bekleyin. Semafor olarak global bir değişken kullanın.
 
Aleksei Radchenko :
Eski DeInit ve yeni OnInit farklı iş parçacıklarında mı yürütülüyor anlamıyorum, OnInit'teki sorun nedir, DeInit'in başlamasını ve tamamlanmasını bekleyin. Semafor olarak global bir değişken kullanın.
Bir grafikte, tüm göstergeler yalnızca bir iş parçacığında çalışır.
 
Alexey Viktorov :

İlkel bir kaybeden örneği kullanmanın amacı nedir?

NEREDEYSE doğru kodun daha iyi bir örneğini kullanın

Alexey, bu örnek, kaybedenler için bile net olacak şekilde oluşturuldu. Bu yüzden ilkel olduğunu yazdım. Üzgünüz, mükemmel öğrenciler için tasarlanmamıştır.

Bu sabah geçen kamyonlara havlayan bir köpek görür. Sana merhaba dedi.

 
Nikolai Semko :

Alexey, bu örnek, kaybedenler için bile net olacak şekilde oluşturuldu. Bu yüzden ilkel olduğunu yazdım. Üzgünüz, mükemmel öğrenciler için tasarlanmamıştır.

Bu sabah, geçen kamyonlara havlayan bir köpek görür. Sana merhaba dedi.

Onunla sürdün mü?

Bir nesnenin yaratılmadan önce varlığının kontrol edilmediği bir örnekten ne anlaşılabilir? Geliştiricilere, büyük hatalarla rastgele yazmayı mümkün kılmadıklarını iddia ediyor musunuz? Bunun gibi rastgele yazacağım ve geliştiriciler bunun için tüm koşulları oluşturmalı. Geliştiriciler, gelecekte yapabileceğim tüm olası hataları öngörmelidir. Ne olmuş??? Sorunu olmadığı yerden çıkarmaya gerek yok.

 
Alexey Viktorov :

Bir nesnenin yaratılmadan önce varlığının kontrol edilmediği bir örnekten ne anlaşılabilir? Geliştiricilere, büyük hatalarla rastgele yazmayı mümkün kılmadıklarını iddia ediyor musunuz?


Bu arada Alexey, tamamen konu dışısın. Orijinal kaynakları okuyun lütfen.
Alıntı yapıyorum: " Eğer nesne daha önce yaratılmışsa, koordinatları değiştirilmeye çalışılır. "

Büyük işlerde çeşitli türlerde çekler koymanın iyi bir uygulama olduğunu anlıyorum. Ancak bu durumda, bu kontrol anlamsızdır. Çünkü nesne yoksa, ObjectCreate onu yaratacak ve varsa, sadece koordinatlarını değiştirecektir. Bu çok ilkel örnekte amaç, Deunit'in nesneyi eski TF'den çıkardığını göstermekti ki bunu mükemmel bir şekilde ortaya koyuyor.
"Gelişiniz" hiçbir şeyle ilgili değil. Büyük olasılıkla sadece dikkat çekmek için bir girişim.
Ve parmaklarınızı eğitmek için herhangi bir anlamı olmayan ekstra kod satırları istiyorsanız, mükemmel "Klavye Solo" kaynağını öneririm.

 
Alexey Viktorov :

Onunla sürdün mü?

Bir nesnenin yaratılmadan önce varlığının kontrol edilmediği bir örnekten ne anlaşılabilir? Geliştiricilere, büyük hatalarla rastgele yazmayı mümkün kılmadıklarını iddia ediyor musunuz? Bunun gibi rastgele yazacağım ve geliştiriciler bunun için tüm koşulları oluşturmalı. Geliştiriciler, gelecekte yapabileceğim tüm olası hataları öngörmelidir. Ne olmuş??? Sorunu olmadığı yerden çıkarmaya gerek yok.


Var olan bir nesneyi yaratmaya çalışmanın nesi bu kadar korkunç? O yok olacak mı?
 
Dmitry Fedoseev :

Var olan bir nesneyi yaratmaya çalışmanın nesi bu kadar korkunç? O yok olacak mı?

Dmitry, senin eğitimli bir programcı olduğunu düşünüyorum. Programlamada size görgü kuralları öğretildi mi?

Aksi takdirde, örneğin dizinin ötesine geçme yeteneği ve diğer varsayımlar ile eski mql4'teki gibi yazabilirsiniz. Yanıt olarak, bir hata aldık ... peki, bayrak ona geri döndü ... hadi devam edelim, zamanımız yok ... Ve sonra, daha katı bir şekilde, umurumda olmayan bir sorunla karşılaşıyoruz. dil ve geliştiricilere hak iddia etmeye başlar ...

Mesih yükseldi.

 
Nikolai Semko :


... Bu çok ilkel örnekte amaç, Deunit'in nesneyi eski TF'den çıkardığını göstermekti ki bunu mükemmel bir şekilde ortaya koyuyor. ...

Silinmeme gerçeği yanıt örneğinde gösterilmiştir. Sorunu olmadığı yerden çıkarmaya gerek yok. Başlatmama nedeni için bir kontrol ayarladım ve nesne silinmedi, sadece koordinatlarını değiştirdi.
 
Alexey Viktorov :
Silinmeme gerçeği yanıt örneğinde gösterilmiştir. Sorunu var olmadığı yerden emmeye gerek yok. Başlatmama nedeni için bir kontrol ayarladım ve nesne silinmedi, sadece koordinatlarını değiştirdi.
 //Часть твоего кода:
void OnDeinit ( const int reason)
  {
   if ( UninitializeReason () != REASON_CHARTCHANGE )       // Что ты здесь сделал? - ЕСЛИ ПРОИСХОДИТ СМЕНА ТФ, ТО НИЧЕГО НЕ ДЕЛАЕМ. Бред! 
                                                       // И зачем здесь использовать функцию UninitializeReason (), когда можно уже существует переменная reason?
    {
     ObjectDelete ( 0 , "InitDeinit" );
     ChartRedraw ( 0 );                                   // Не нужная функция в данном случае, т.к. она обычно применяется после изменении свойств объктов. Объект удалится и так. 
     Print ( __FUNCTION__ , "  InitDeinit удалён" );       // А где ж твоя любимая проверка, вдруг не удален.
    }
  }

Örneğim, yeni TF'nin Biriminin ve eski TF'nin DeUnit'inin belirsiz yürütme dizisi sorununu göstermek için oluşturuldu ve buna bir çözüm olarak değil.

Sadece sorunu atladın, çözmedin.
Örneğimde, eski TF'nin Deunit'inde, TF değiştirilirken de dahil olmak üzere her durumda nesnenin silinmesi ve yeni nesnenin Biriminde yeniden oluşturulması önemlidir.

Sıra, mantıksal olarak olması gerektiği gibi, önce eski TF'nin Deunit'i, ardından yeni TF'nin Birimi ise. Ardından nesne silinir ve ardından yeniden oluşturulur.

Sıra önce yeni TF'nin Birimi, ardından eski TF'nin De-Unit'i ise, o zaman nesne, onu Birim'de oluşturmaya çalışırken basitçe değiştirilir, çünkü. henüz kaldırılmadı. Ve sonra eski TF'nin Deunit'i tarafından kaldırılır. Hata burada yatıyor.

Bu örneğin amacı buydu - bu dalı okumamış ve bu "özelliği" bilmeyen herhangi bir programcının karşılaşabileceğini göstermek.
Bu örnek bir çözüm olarak görülmedi. Çözümler burada ve burada sunulmaktadır olarak. Sanırım biraz sonra bir çözüm de ekleyeceğim, ancak terminalin ve dosyaların global değişkenlerini kullanmadan ve ayrıca bu çözümün çalışması için, bir pencerede birkaç özdeş gösterge kurulu olsa bile. Böyle bir sorunu çözmeyi denemek ister misiniz? Veya yalnızca, özellikle orada olmadıklarında, başka birinin kodundaki hataları arayabilirsiniz.

Artık aptal olma!