Hatalar, hatalar, sorular - sayfa 651

 
mql5 :
Hayır, bu sadece bir 32bit terminal sorunu değil. Ancak bugün 32bit için çözüm hazır, 64bit'te hala 256Kb yığın sınırı var.
Ancak programcının kendisi özellik aracılığıyla gerekli yığın boyutunu belirtmezse, terminaldeki EX5 varsayılan yığın boyutuyla (256Kb) çalışacaktır.

Büyük boy hakkında.
Bir işlev içindeki bir değişkenin her bildirimi (statik değişkenler hariç) yığında alan tahsis edilirken, yığında yerel değişkenler için alan tahsisi her çağrıda gerçekleşir.

Bu nedenle, işlevin boyutu 64Kb'lik yerel değişkenlere sahipse, yığın 3 iç içe çağrı için yeterli olacaktır, 4. çağrı ile yığın taşacaktır (çünkü yığının bir kısmı terminalin iç ihtiyaçlarına gider). Bu nedenle, büyük yerel verilere ihtiyaç varsa, dinamik bellek kullanmak daha iyidir - işleve girerken, sistemde yerel ihtiyaçlar için bellek ayrılır (yeni, ArrayResize) ve işlev çıktığında bellek silinir ( sil, ArrayFree).

Detaylı açıklama için teşekkürler. Ama bu kesinlikle benim sorunum değil. Bacakların büyüdüğü fonksiyon zaten bulunduğundan ve böyle bir hacim olmadığından (64Kb - 256Kb) bu hatayı tespit etmek için bir test EA yazmaya çalışacağım. Geceleri, servis masasına sorunlu bir işleve sahip bir uzman göndereceğim.

 

Aynı işlevin ( CLBufferWrite ( ) ) çalışmasıyla ilgili başka bir takip sorusu (ve lütfen bunu yardımda açıklayın ).

Bilgi, ArrayIsSeries bayrak seti (==true) ile gösterge arabelleğinden doğrudan ara belleğe yazılırsa, giriş dizisi hangi yönde okunacaktır?

Bayrağın görmezden gelineceğinden şüpheleniyorum ve ayrıca hangi yerden okuyacağı belli değil? Belirtilen ofset dizinin fiziksel sonundan mı yoksa baştan mı sayılacak?

Tabii şimdilik şimdilik , her ihtimale karşı suya üfleyeceğim (ArrayIsSeries == false ile çalışacağım), ama yine de?

 
Şu anda, OpenCL arabelleğiyle çalışma işlevi tamamlanmamıştır ve tamamlanacak/eklenecektir.
offset - bu işlevlerde, aslında, OpenCL arabelleğinin başlangıcından itibaren bayt cinsinden ofset ve işleve geçirilen dizi, ArrayIsSeries bayrağı dikkate alınmadan sıfır öğesinden kopyalanacaktır.
 
mql5 :
1. Şu anda, OpenCL arabelleği ile çalışma işlevselliği tamamlanmamıştır ve tamamlanacak/eklenecektir.
2. offset - bu işlevlerde, aslında, OpenCL arabelleğinin başlangıcından itibaren bayt cinsinden ofset ve işleve geçirilen dizi, ArrayIsSeries bayrağı dikkate alınmadan sıfır öğesinden kopyalanacaktır.

1. Kagbe'den şüphelendim... :)

2. Evet. Yelken. Bu, doğrudan gösterge arabelleğinden parçalar halinde yazmanın (henüz) işe yaramayacağı anlamına gelir.

Elbette, başlangıç pozisyonlarını hem kaynakta hem de alıcıda hareketli hale getirmeniz gerekir. Burası gibi:

int   ArrayCopy (
    void    dst_array[] ,        // куда копируем
    void    src_array[] ,        // откуда копируем
    int     dst_start=0 ,        // с какого индекса пишем в приемник
    int     src_start=0 ,        // с какого индекса копируем из источника
    int     cnt=WHOLE_ARRAY      // сколько элементов
   );

İndeksleme ile (yön ve ölçü birimleri (bayt / eleman)) lütfen yardımda daha dikkatli olun. Ve sonra bu .. zaman çok üzgünüm .. :)))

--

Cevap için teşekkürler. İşlevselliği iyileştirme çabalarınızı gerçekten takdir ediyorum.

Ziyafetin devamını sabırla bekleyeceğim. Bu arada, bir hançerin ucunda dans etmek zorundasın. :)

 

597 x64 oluşturun, yeni yüklendi.

2012.02.23 21:43:24 OpenCLTest (EURUSD,M30) SaveBitmapToFile 'Mandelbrot.bmp' açılırken hata oluştu
2012.02.23 21:43:13 OpenCLTest (EURUSD,M30) 'Mandelbrot.bmp' açılırken SaveBitmapToFile hatası
2012.02.23 21:43:12 OpenCLTest (EURUSD,M30) SaveBitmapToFile 'Mandelbrot.bmp' açılırken hata oluştu
2012.02.23 21:43:10 OpenCLTest (EURUSD,M30) SaveBitmapToFile 'Mandelbrot.bmp' açılırken hata oluştu
2012.02.23 21:43:09 OpenCLTest (EURUSD,M30) SaveBitmapToFile 'Mandelbrot.bmp' açılırken hata oluştu
2012.02.23 21:43:08 OpenCLTest (EURUSD,M30) SaveBitmapToFile 'Mandelbrot.bmp' açılırken hata oluştu
2012.02.23 21:43:07 OpenCLTest (EURUSD,M30) SaveBitmapToFile 'Mandelbrot.bmp' açılırken hata oluştu
2012.02.23 21:43:06 OpenCLTest (EURUSD,M30) SaveBitmapToFile 'Mandelbrot.bmp' açılırken hata oluştu

Daha önce durum böyle değildi.

// Win7x64

 
MetaDriver :

597 x64 oluşturun, yeni yüklendi.

Daha önce durum böyle değildi.

// Win7x64

Örneği yeniden derlemeyi deneyin. Kontrol ettim - her şey benim için çalışıyor.
 
Renat :
Örneği yeniden derlemeyi deneyin. Kontrol ettim - her şey benim için çalışıyor.

Zaten yüzlerce kez yeniden derlendi. Tekrar yeniden başlatacağım.

 
MetaDriver :

... Şimdi yeniden başlatacağım.

Hayır, yardımcı olmadı.

Renat :

...... Kontrol ettim - her şey benim için çalışıyor.

Bu yüzden benim için de işe yarıyor. Ancak her on ila kırk döngüde bir böyle bir kaka uçar:

2012.02.23 23:16:44 OpenCLTest (EURUSD,M30) SaveBitmapToFile 'Mandelbrot.bmp' açılırken hata oluştu
2012.02.23 23:16:43 OpenCLTest (EURUSD,M30) SaveBitmapToFile 'Mandelbrot.bmp' açılırken hata oluştu
2012.02.23 23:16:42 OpenCLTest (EURUSD,M30) 'Mandelbrot.bmp' açılırken SaveBitmapToFile hatası
2012.02.23 23:16:36 OpenCLTest (EURUSD,M30) SaveBitmapToFile 'Mandelbrot.bmp' açılırken hata oluştu
 
MetaDriver :

Hayır, yardımcı olmadı.

Bu yüzden benim için de işe yarıyor. Ancak her on ila kırk döngüde bir böyle bir kaka uçar:

Ayrıca keşfedildi.

Bunun nedeni, belirtilen dosya üzerinde senkronizasyon olmadan iki farklı iş parçacığında çalışılıyor olması ve dosyanın periyodik olarak kilitlenmesidir:

  1. komut dosyası dizisi saniyede 10 kez dosyanın üzerine yazar (kart hızına bağlıdır)
  2. grafik, komut dosyasının isteği üzerine akışındaki görüntüyü yeniden yükler

Resimli örnek sadece OpenCL ile çalışma prensibini göstermek için yapıldığı için bu bir sorun teşkil etmemektedir.

Документация по MQL5: Файловые операции / FileMove
Документация по MQL5: Файловые операции / FileMove
  • www.mql5.com
Файловые операции / FileMove - Документация по MQL5
 
Renat :

Resimli örnek sadece OpenCL ile çalışma prensibini göstermek için yapıldığı için bu bir sorun teşkil etmemektedir.

Kabul ediyorum. Ek olarak, doğrudan GraphLabel nesnesinin arabelleğine göndermenin zamanı geldi. :)