Standart özelliklerin/yaklaşımların alternatif uygulamaları - sayfa 13

 
Реter Konow :

Bloğun başlangıcı şöyle görünür:

Anladığım kadarıyla kendi tercüman dilinizi oluşturmuşsunuz.

  • arayüzün kendisini bu dilde bir metin dosyası olarak yaratırsınız
  • daha sonra, Java makinesine benzer şekilde, ana programın gövdesi bu metin dosyasını yükler ve onu anladığı bir "bayt koduna", esasen bir diziye dönüştürür.
  • bu diziden arayüz görüntüleri oluşturulur

Aşağı yukarı böyle mi?

Ve başka bir aptal soru:

farklı öğelerle oluşturulmuş her pencere - bir kaynak mı yoksa çok mu?

Tehdit Muhtemelen en iyi benzetme HTML olsa da

Daha önce de söylediğim gibi, beyninizin bir grafik tasarımcıya ihtiyacı var. Andrey Barinov'unki gibi bir şey.

Ayrıca videolarınız çok uzun. 45 dakikadan 5 dakikaya ve tercihen 3 dakikaya indirilmelidir.

 
A100 :

Cevabı kendin bulmaya çalıştın mı?

İpucu: google arama çubuğuna "DBL_MANT_DIG 53 52" yazın

Evet teşekkürler. Bulundu.

 
Nikolai Semko :

1. Anladığım kadarıyla kendi tercüman dilinizi oluşturmuşsunuz.

  • arayüzün kendisini bu dilde bir metin dosyası olarak yaratırsınız
  • daha sonra, Java makinesine benzer şekilde, ana programın gövdesi bu metin dosyasını yükler ve onu anladığı bir "bayt koduna", esasen bir diziye dönüştürür.
  • bu diziden arayüz görüntüleri oluşturulur

Aşağı yukarı böyle mi?

2. Ve başka bir aptal soru:

farklı öğelerle oluşturulmuş her pencere - bir kaynak mı yoksa çok mu?

Tehdit Muhtemelen en iyi benzetme HTML olsa da

Daha önce de söylediğim gibi, beyninizin bir grafik tasarımcıya ihtiyacı var. Andrey Barinov'unki gibi bir şey.

Ayrıca videolarınız çok uzun. 45 dakikadan 5 dakikaya ve tercihen 3 dakikaya indirilmelidir.

1. Evet, "tercüman" tanımının yarattığım şeye en uygun olduğu ortaya çıktı (oluşturma sürecinde ne olduğu hakkında hiçbir fikrim olmamasına rağmen).

  • Evet bu doğru. Arayüz bir metin dosyası olarak oluşturulur. Daha doğrusu, "string SOURCE[]" dizisi, göstergeye bağlı dosyanın içinde doğrudan başlatılır. (Kullanıcı "KIB-kodu" yazar ve böylece diziyi başlatır). Ayrıca, gösterge dosyası kullanıcı tarafından derlenir ve dizinin içeriği EventChartCustom() kullanılarak Yapıcıya (EA) iletilir.

  • Yapıcı içinde, özel "KIB kodu", dizelerden "dilimleme" biçiminde kabul edilir. Geçirilen her dize, 128 karakterlik bir bitiştirmedir. Bu dizeler bölünür ve Yapıcı tarafındaki SOURCE dizisinin bir kopyasına yazılır. Ardından, "SOURCE" dizisinin içeriğini "int G_CORE[][]" dizisinin içeriğine dönüştüren "Core Builder" çalıştırılır. Bu "çekirdek". Bir içeriği diğerine, 5000 satırdan fazla koda dönüştüren bir blok (bir dizi işlevden oluşur).
  • .
  • Dönüşüm, tüm öğelerin ve pencere platformlarının prototiplerini içeren "int TEMPLATES[]" ara dizisinin yardımıyla gerçekleşir. "SOURCE[]" (kullanıcı tarafından oluşturulan) talimatına göre ana çekirdek monte edilir. Öğe şablonları "ŞABLONLAR"dan alınır ve "G_CORE" biçimine dönüştürülür.
  • .
  • Çekirdek oluşturulduğunda, "motor" (yapıcının GUI mekaniğini yönetmekten sorumlu kısmı) yerleşik çekirdekle çalışmaya başlar. Gerekli tuvalleri çizer ve pencereleri açar.

2. Oluşturulan her pencere birkaç tuvaldir (kaynaklar). İlk ikisi pencere platformudur. Daha önce, farklı bir çizim yöntemi kullandım ve bu nedenle bazı ayrıntılar yarı saydamdı ve grafik bunlar aracılığıyla görülebiliyordu. Bunu önlemek için arka plana başka bir tuval ekledim. Sonra teknoloji gelişti ama tuval arka planda kaldı. Teknolojide "köklendi" ve şimdi ondan kurtulmak zor. Ama sonunda onu kaldıracağım ve pencere platformu tek bir tuvalden oluşacak.

Ayrıca, "alanlar" (sekmeyle değiştirilen görüntüler) kendi başlarına tuvallerdir. Hazır görüntüler içerirler ve bu nedenle geçiş mümkün olduğunca çabuk gerçekleşir. Her şeyi aynı tuval üzerine çizecek olsaydım, kaçınılmaz olarak görüntüleri değiştirmek daha yavaş olurdu. yeniden çizmem gerekecekti. Genel olarak, düşünerek, bunun en iyi seçenek olduğu sonucuna vardım.


3. Görsel grafik tasarımcı - hedefimdi ve olmaya devam ediyor. Uygulamasının başlangıcına çok yaklaştım. Yapısı hakkında bir anlayış var. Konseptin uygulanması için gerekli her şey var. Nasıl yapacağımı biliyorum. Sadece zaman alır.


not. Gelişimimin bir özelliği kendiliğindenliktir . Tercümanlara veya HTML'ye aşina değildim ve nasıl çalıştıklarını bilmiyordum. Ancak bu, benzer bir şey yaratmanızı ve yaratmanızı en azından engellemez. İyi giderse devam etmeyi düşünüyorum. :)

 
Реter Konow :

İlk bakışta, hafızanızı çok savurganca kullanıyorsunuz. Her ne kadar yanılıyor olsam da.

Ve gördüğüm kadarıyla, ideal olarak göreviniz için fiyat tablosunun üzerinde şeffaflık destekli tek bir tuval olmalıdır.

MQL5'in performansı, doğru kodlarsanız, bellekte hazır bloklar olmadan anında tüm arayüzü oluşturmak için yeterli olmalıdır.

Hacimli arabirimlerin performansı artırması için bellek kaynaklarından fedakarlık etmeniz gerekeceğini göz ardı etmesem de.

Şimdiye kadar, yaklaşımınızda büyük bir avantaj görüyorum:

Tam teşekküllü bir grafik tasarımcı oluşturmanız daha kolay olacaktır çünkü. işaretleme kodunu oluşturmak, gerçek MQL kodundan daha kolaydır.


Ama bu filimsi bir görev.
 
Nikolai Semko :

İlk bakışta, hafızanızı çok savurgan bir şekilde kullanıyorsunuz. Her ne kadar yanılıyor olsam da.

Ve gördüğüm kadarıyla, ideal olarak göreviniz için fiyat tablosunun üzerinde şeffaflık destekli tek bir tuval olmalıdır.

MQL5'in performansı, doğru kodlarsanız, bellekte hazır bloklar olmadan anında tüm arayüzü oluşturmak için yeterli olmalıdır.

Hacimli arabirimlerin performansı artırması için bellek kaynaklarından fedakarlık etmeniz gerekeceğini göz ardı etmesem de.

Şimdiye kadar yaklaşımınızda büyük bir avantaj görüyorum:

Tam teşekküllü bir grafik tasarımcı oluşturmanız daha kolay olacaktır çünkü. işaretleme kodunu oluşturmak, gerçek MQL kodundan daha kolaydır.


Ama bu filimsi bir görevdir.

Nispeten küçük bellek taşması hala var. Haklısın. Metin veya simgeler gibi öğe nesneleri, "haksız olarak" çekirdekte 235 özellik alırken, kendi özellikleri birkaç kat daha azdır. Öğenin ana nesnesi, yani taban, 235 özelliğin tümüne sahip olmalıdır, ancak simge ve metin nesnelerinin daha az özelliği vardır. Bu bir bellek taşması yaratır.

Buradaki fikir, ana öğe nesneleri satırına 60 hücre daha eklersem, bunlara metin ve simge özellikleri koyabilirim. Bu, çekirdeği "daha geniş" hale getirecek, ancak nesnelerin üçte ikisi kaldırılabilir.

Çekirdek oluşturma hızında büyük bellek tasarrufu ve kazanç olacaktır. Ancak bunu yapmak teknik olarak zordur. Çok fazla yeniden yapılması gerekiyor. Şimdiye kadar, bellek tüketimi ve oluşturma süresi oldukça kabul edilebilir. Ama mükemmelliğin sınırı yok...


Tek bir tuval kullanmak iyi bir fikir değil. Ne anlamı var? Her pencere için bir tuval ve her alan için bir tuval kullanmak çok daha kolaydır. Genel tuvalin çok daha sık yeniden çizilmesi gerekiyor. Her görüntü geçişinde veya her pencere geçişinde. Kaydırmada... Yeniden çizmenin her zaman hızlı olmadığı dikkate alınmalıdır. Bu algoritmalarla ilgili değil, grafiklerin "hileleri" ile ilgili. Açıklayacak:

Basit bir dikdörtgen etiket (örneğin bir kare) çizerseniz, bu, istenen hücrelerin istenen değerle (renk) başlatılmasıyla piksel dizisi boyunca bir döngüdür.

Çerçeveli bir kare çizerseniz, piksel dizisinde iki döngü olur.

Kenarlıklı ve simgeli bir kare çizerseniz, bunlar üç döngüdür.

Yüzey gradyanına ve gölgeli bir simgeye sahip kenarlıklı bir kare çizerseniz, bu piksel dizisinde dört veya daha fazla döngü olur.

Bu nedenle, grafikler ne kadar soğuk olursa, istenen görüntüyü yaratarak bu piksel dizisini döngüler halinde o kadar çok "ütülemeniz" gerekir. Bu nedenle, yeniden çizmeye ne kadar az ihtiyaç duyulursa, o kadar iyidir.

Tüm görüntüler için tek bir tuval, sizi her şeyi sürekli olarak yeniden çizmeye zorlayacaktır. Bu nedenle, bu uygun bir çözüm değildir.


not. Görev elbette bir fil ama ben halledebilirim. Yine de yardım etmekten çekinmeyeceğim.

ZYY. Video için teşekkürler, ilham verici! :)

 
Реter Konow :


Pencerenin boyutunu fare ile değiştiriyor musunuz?
Eğer öyleyse, kırmızı kutu görünüyor mu?

 
Nikolai Semko :

Pencerenin boyutunu fare ile değiştiriyor musunuz?
Eğer öyleyse, kırmızı kutu görünüyor mu?

Hangi karelerden bahsettiğini anlamadım.

Dinamik pencerenin boyutları fare ile değiştirilir. Başka nasıl?


not. Dinamik bir pencere başlangıçta tam ekran boyutuna sahiptir. Ayrıca, istenen boyuta "kırpılır". Yani, tüm dinamizmi, önceden oluşturulmuş bir bitmap'in önceden ayarlanmış maksimum alanında gerçekleştirilir.

 

Yuvarlama konusuna devam.
Burada, genişletilmiş bir SSE4.1 talimat sistemi setini destekleyen modern Intel işlemcilerde, bir yuvarlama talimatı ROUND{PS, PD} olduğunu öğrendim. Elbette AMD'de buna benzer bir şey var.

https://ru.wikipedia.org/wiki/SSE4#SSE4a

http://o-ili-v.ru/wiki/SSE4

Ne olur - MQL5 derleyicisi bu komutu işlemci düzeyinde kullanmıyor mu? Çünkü Intel Kaby Lake işlemcim bu seti destekliyor.

Ve çok daha fazlası var, hatta vektörlerin skaler çarpımı.

SSE4 — Википедия
  • ru.wikipedia.org
SSE4 — новый набор команд микроархитектуры Intel Core, впервые реализованный в процессорах серии Penryn (не следует путать с SSE4A от AMD)[1]. Он был анонсирован 27 сентября 2006 года, однако детальное описание стало доступно только весной 2007 года. Более подробное описание новых возможностей процессоров для программистов можно найти на сайте...
Neden: