Hatalar, hatalar, sorular - sayfa 1509

 
Дмитрий Касаткин :
platforma nasıl giriş yapamıyorum, web sitesi web terminalinin bu MetaTrader Sunucusu tarafından desteklenmediğini söylüyor. Lütfen sunucuyu güncellemek için komisyoncunuzla iletişime geçin, platformun kendisinde bağlantı olmadığını mı söylüyor?
Aracınız Web terminalini desteklemiyor. Terminal bilgisayarda kuruluysa ve bağlantı yoksa, daha önce kapatılmışsa 443 numaralı bağlantı noktasını açmanız gerekir.
 
Sevgili geliştiriciler, OnDeinit işlevinin işlenme sırası nedir - nesneleri ve diğer değişkenleri silme, belleği temizleme vb.
 
coderex :
Sevgili geliştiriciler, OnDeinit işlevinin işlenme sırası nedir - nesneleri ve diğer değişkenleri silme, belleği temizleme vb.

OnDeinit, belirli durumlarda çağrılan bir MQL4/5 programında sıradan bir işlevdir. Burada, programladığınız gibi, öyle olsun.

Soruyu belirtin. Tam olarak neyle ilgileniyorsunuz?

 
Slawa :

OnDeinit, belirli durumlarda çağrılan bir MQL4/5 programında sıradan bir işlevdir. Burada, programladığınız gibi, öyle olsun.

Soruyu belirtin. Tam olarak neyle ilgileniyorsunuz?

Açıkça silinen (tahsis edilen bellekte oluşturulan) nesnelerle her şey açıktır. Otomatik bellekte oluşturulan nesneleri silme ve belleği boşaltma süreciyle ilgilenir.

Onlar. Örneğin, iki nesne ve temel tipte bir değişken vardır:

 class CFirst {...};
class CSecond {...};

int iVolume = 100 ;
CFirst first_obj;
CSecond *second_obj;

int OnInit ( void ) {
   second_obj = new CSecond();
// текст функции OnInit
}
void OnDeinit ( const int reason) {
   if ( CheckPointer (second_obj == POINTER_DYNAMIC )
       delete second_obj;
}

Program silindiğinde belleği boşaltma ve tüm nesneleri silme sırasının ne olacağı ile ilgileniyor.

 
Slawa :

...

Terminal hangi durumlarda donabilir? - görünüşe göre terminalin asılması gereken düzenli durumlar var.

Gözlemlerime göre, her zaman şu durumlarda askıda kalıyor (belirsiz bir süre asılı kalıyor):

1. Sunucuya bağlanma.

2. P1. hesaplar arasında geçiş yaparken.

3. Terminalin başlatılması sırasında .

Terminal başlangıçta en son askıda kaldığında. Görev yöneticisine baktım, terminal bayt bayt bellek yiyordu, birkaç dakika sonra 8GB belleğin tamamını yutmuştum ve işletim sistemi terminalle birlikte askıda kaldı. Sistem birimindeki "sıfırla" düğmesine basmak zorunda kaldım.

Bilgisayarı yeniden başlattıktan sonra terminali başlattım - takılma hikayesi kendini tekrarladı, sistem onu terminalle birlikte uyandırmak için yaptığım hızlı girişimlerime yanıt vermeyi kesti.

Bilgisayarı yeniden başlattıktan sonra, terminalin tüm yapılandırma dosyalarını sildim, başlattım - kapatma hikayesi kendini tekrarladı.

Bilgisayarı yeniden başlattıktan sonra, ticaret sunucularının tüm geçmiş dosyalarını sildim ve ancak bundan sonra terminal normal çalışmaya tenezzül etti ve ardından yaklaşık 3 dakika düşündükten sonra.

Terminal, inşadan inşaa askıda kalıyor. Win10x64.

 
Joo Zepper :

Terminal hangi durumlarda donabilir? - görünüşe göre terminalin asılması gereken düzenli durumlar var.

Gözlemlerime göre, her zaman şu durumlarda askıda kalıyor (belirsiz bir süre asılı kalıyor):

1. Sunucuya bağlanma.

2. P1. hesaplar arasında geçiş yaparken.

3. Terminalin başlatılması sırasında .

Terminal başlangıçta en son askıda kaldığında. Görev yöneticisine baktım, terminal bayt bayt bellek yiyordu, birkaç dakika sonra 8GB belleğin tamamını yutmuştum ve işletim sistemi terminalle birlikte askıda kaldı. Sistem birimindeki "sıfırla" düğmesine basmak zorunda kaldım.

Bilgisayarı yeniden başlattıktan sonra terminali başlattım - takılma hikayesi kendini tekrarladı, sistem onu terminalle birlikte uyandırmak için yaptığım hızlı girişimlerime yanıt vermeyi kesti.

Bilgisayarı yeniden başlattıktan sonra, terminalin tüm yapılandırma dosyalarını sildim, başlattım - kapatma hikayesi kendini tekrarladı.

Bilgisayarı yeniden başlattıktan sonra, ticaret sunucularının tüm geçmiş dosyalarını sildim ve ancak bundan sonra terminal normal çalışmaya tenezzül etti ve ardından yaklaşık 3 dakika düşündükten sonra.

Terminal, inşadan inşaa askıda kalıyor. Win10x64.

Aynı Windows, terminal yalnızca yöneticiden başlatılır ve meta düzenleyici türündeki tüm dosyalar da yöneticidendir, sorun yoktur.
 

Kodu nasıl parçalara bölüp dosyaları doğru bir şekilde dahil edebilirim, bununla ilk karşılaştığımda deneyimli uzmanlara bir soru soruyorum.

İşte bir örnek

 class WL : public C_Object
  {
private :
   MqlTick            tick;
   struct STRUCT_SYMBOL // Структура символа
     {    
       bool               TRADING_IS_ALLOWED;       // Обновлять
       double             INDIKATOR_VOLUME;         // Обновлять
     };
   struct STRUCT_WATCH_LIST // Структура сохраненных листов
     {
       string             NAME_LIST;
     };
   STRUCT_WATCH_LIST WatchList[];
   STRUCT_SYMBOL     SymbolMass[];
}

SONRA, sınıf başka bir sınıftan miras alınır ve bir yapı içerir, örnekte yapıyı azalttım, sonra yapının bir dizisiyle çalışmak için yöntemler var

Bu yöntemlerden 40-50 kadarını henüz bilmiyorum.

Her yöntemi dahil edilen bir dosyaya koymak veya bir şekilde kod yapısını, EA'nın kendisi daha sonra aramanın zor olduğu 10.000 -20.000 satır kod içermemesi için düzenlemek istiyorum.

Şu anda gördüğüm tek şey, referans olarak bir dizi yapı göndermek.

tip

func(STRUCT_SYMBOL & str)

Bunun en iyi seçim olduğunu düşünmüyorum.

Ne yapılabilir ?

 
coderex :

Açıkça silinen (tahsis edilen bellekte oluşturulan) nesnelerle her şey açıktır. Otomatik bellekte oluşturulan nesneleri silme ve belleği boşaltma süreciyle ilgilenir.

Onlar. Örneğin, iki nesne ve temel tipte bir değişken vardır:

Program silindiğinde belleği boşaltma ve tüm nesneleri silme sırasının ne olacağı ile ilgileniyor.

OnDeinit'in bununla hiçbir ilgisi yok.

Belgeleri okudunuz mu?

 
Vladimir Pastushak :
Aynı Windows, terminal yalnızca yöneticiden başlatılır ve meta düzenleyici türündeki tüm dosyalar da yöneticidendir, sorun yoktur.
yöneticiden? ve belki terminale haçlı bir şapka, altın bir elma, bir asa verin ve ona Tüm Rusya'nın En İyi Çarı'ndan başkası demeyin?
 
Vladimir Pastushak :

Kodu nasıl parçalara bölüp dosyaları doğru bir şekilde dahil edebilirim, bununla ilk karşılaştığımda deneyimli uzmanlara bir soru soruyorum.

İşte bir örnek

Yani, sınıf başka bir sınıftan miras alınır ve bir yapı içerir, örnekte yapıyı azalttım, o zaman yapının bir dizisiyle çalışmak için yöntemler var

Bu yöntemlerin 40-50 kadarını henüz bilmiyorum.

Her yöntemi dahil edilen bir dosyaya koymak veya kod yapısını, EA'nın kendisi daha sonra aramanın zor olduğu 10.000 - 20.000 satır kod içermemesi için başka bir şekilde düzenlemek istiyorum.

Şu anda gördüğüm tek şey, referans olarak bir dizi yapı göndermek.

tip

Bunun en iyi seçim olduğunu düşünmüyorum.

Ne yapılabilir ?

Sınıflar geniş ise, her sınıf için ayrı bir liste oluşturmak daha iyidir ve bu sınıfın nesnelerinin kullanıldığı kodda, sınıf listesini #include ile bağlayın. Aynısı yapılar ve işlev kitaplıkları için de geçerlidir. Sınıflar ve yapılar yeterli değilse, tek bir listeye dahil edilebilirler. Ayrıca ortak tanımların ve makroların bir listesini de oluşturabilirsiniz.

Ve bir programla ilgili bütün bir listeler ailesine sahip olacağınızdan korkmayın, bu yaygın bir durumdur, ticaret sistemlerimde 15-20 listeleme artı arayüz için .bmp ve .gif dizinleri kullanıyorum. Tüm listeleri ayrı dizinlerde dağıtırım. Bu, hataları yakalarken ve yükseltme yaparken gezinmeyi kolaylaştırır.