Errores, fallos, preguntas - página 2574

 
Aleksei Beliakov:
Banal si imprime los resultados de estas funciones en ontick entonces es para el tiempo 1970.01.01 para el precio 0
Solía ser la hora del bar o del precio.
Así que ahora es así.

¿Quizás tengas un fallo en tu ordenador? Tengo este código en la compilación 1220.

 Print("iHigh ", iHigh(NULL, PERIOD_W1, 0));
 Print("iTime ", iTime(NULL, PERIOD_W1, 0));

imprime

2019.09.23 09:41:27.560 00 EURUSD,M5: iTime 2019.09.22 00:00:00
2019.09.23 09:41:27.560 00 EURUSD,M5: iHigh 1.10245
 
Aleksei Beliakov:
Si se imprimen los resultados de estas funciones en ontick, es para la hora 1970.01.01 para el precio 0.
Solía ser la hora del bar o del precio.
Así que ahora es así

¿Cuál esel código de error?

¿Cuáles son los parámetros de la prueba?

¿Se cargan los datos de las semanas y los meses? ¿Cuántos hay en total?

 
Slava:

¿Cuál esel código de error?

¿Cuáles son los parámetros de la prueba?

¿Se cargan los datos por semanas y meses? ¿Cuántos hay en total?

He vuelto a comprobarlo y ahora todo funciona.

He descargado la historia.

Gracias.

 
Estoy seguro de que este tema ya se ha planteado: Debería ser posible coexistir dos versiones diferentes de MT5 en un mismo escritorio (desactivar la actualización automática y el rollback). O, al menos, la beta y el lanzamiento. O es posible (sin virtualización).
 

Observación de la memoria.

Tengo CopyRates ejecutado unas mil veces en mi código.

Luego se procesa de alguna manera el array de citas, y al final de esto llamo:

ArrayRemove(ArrayQuotes,0,ArraySize);

ArrayFree(ArrayQuotes);

ArrayResize(ArrayQuotes,0);

ArrayFree(ArrayQuotes);

ZeroMemory(ArrayQuotes);

(sólo se experimenta de forma diferente)

Resultado - la memoria sigue creciendo geométricamente y se obstruye, junto con la carga en los procesadores - el procesador i7 se obstruye en un 80% en total en todos los núcleos lógicos, la memoria es más de Giga.

Hasta ahora he conseguido limitar el consumo de recursos con un programa de terceros: la CPU no más del 15% y la memoria no más del giga.

Pregunta: ¿es un error o una característica de la plataforma?

 
¿Es posible seleccionar rígidamente la codificación de la fuente? Sé que cuando los caracteres son sólo ascii, es de un solo byte, de lo contrario utf-16. ¿Puede utf-8?
 

Por cierto, extraño comportamiento del meta-editor, debería ser corregido:

fn_call();/////////////////////

Al hacer doble clic en las barras oblicuas se resaltan las barras con el carácter anterior (si no es un número/letra allí).

¿Por qué es un inconveniente? Hice una edición temporal en el código, resalté el espacio de esta manera, luego necesito resaltar y borrar rápidamente las barras simples.

 

Volviendo a la cuestión de pasar cadenas desde la dll, wchar_t* como puntero.
Del artículo de Renat sobre el trabajo con cadenas en dll, se desprende que mql type string toma un puntero a cadena wchar_t* de dll externa.
Es decir, enviamoswchar_t* a la dll y lo recibimos como cadena & en mql.
Pero la función C

wcscpy_s(wchar_t *dest, rsize_t  dest_size, const wchar_t *src);

no funciona correctamente, es decir, se recibe un puntero a la cadenawchar_t* dest en mql, pero falla y entra y sale.
A veces el terminal se bloquea y el programa se termina.

Con la función

wcscpy(wchar_t *dest,  const wchar_t *src);

El terminal no se bloquea, pero las cadenas también llegan de forma intermitente.
Por favor, corríjalo en la próxima versión.

ZS. Me olvidé de especificar que el punterowchar_t* se pasa desde otro hilo.
Es decir, la función wcscpy_s o wcscpy se llama en un hilo separado.

 
Roman:

Volvemos a la cuestión de pasar cadenas desde la dll, wichar_t* como puntero.
Del artículo de Renat sobre el trabajo con cadenas en dll, se desprende que mql type string toma un puntero a cadena wichar_t* de dll externa.
Es decir, enviamos wichar_t* a la dll y lo recibimos como cadena & en mql.
Pero por alguna razón, la función C

no funciona correctamente, es decir, se recibe un puntero a la cadenawichar_t* dest en mql pero falla y entra y sale.
A veces el terminal se bloquea y el programa se termina.

Con la función

El terminal no se bloquea, pero las cadenas también llegan de forma intermitente.
Por favor, corríjalo en la próxima versión.

ZS. Se me olvidó mencionar que el puntero wichar_t* se pasa desde otro hilo.
Es decir, la función wcscpy_s o wcscpy se llama en un hilo separado.

¿Y quién asignará la memoria para la cadena dest?
 
Vladimir Simakov:
¿Y quién asignará la memoria para la cadena dest?

La memoria se asigna en el código mql como

#import "Dll.dll"
   void Func(string task, string & out);
#import 

string оut;
StringInit(out, 165, 32);

y se pasa como un puntero a la memoria asignada, ya que string en mql es wchar_t* en dll

Func("Task", out);