Pregunta. Hay una función llamada GetTickCount () - devuelve el número de milisegundos transcurridos desde que se inició el sistema. La nota dice que "el recuento está limitado por la resolución del temporizador del sistema ".Como la hora se almacena como un entero sin signo, se desborda cada 49,7 días cuando el ordenador está funcionando continuamente".
¿Y qué pasa cuando el contador se desborda? ¿Se reinicia y comienza una nueva cuenta atrás, o se congela el sistema?
Pregunta. La descripción de switch(expresión){...} dice que "la expresión del operadorswitch debe ser de tipo entero". He visto la descripción de este operador con expresiones de otros tipos en Internet. ¿Se ampliará el uso del operador switch añadiendo expresiones de tipo cadena?
Pregunta. La descripción de switch(expresión){...} dice que "la expresión del operador switch debe ser de tipo entero". He visto la descripción de este operador con expresiones de otros tipos en Internet. ¿Ampliamos el uso del operador switch añadiendo expresiones del tipo cadena?
No, por desgracia, no lo hará. Para los tipos de cadena sólo si ... si no, si ... Si no...
El uso de tipos enteros en switch acelerará el operador de switch varias veces más que si
Pregunta. La descripción de la función StringConcatenate() dice que "StringConcatenate() funciona más rápido y con mayor economía de memoria que el enlace de cadenas mediante operaciones de adición, debido a que no se utilizan variables temporales de tipo cadena". He utilizado los ejemplos del Manual de Referencia, modificándolos ligeramente:
string a="a",b="b",c;
uint start,stop;
long i,length=10000000;
//--- первый способ
start=GetTickCount();
for(i=0;i<length;i++)
{
c=a+b;
}
stop=GetTickCount();
Print("time for 'c = a + b' = ",(stop-start)," milliseconds, i = ",i);
//--- второй способ
a="a"; // заново инициализируем переменную a
start=GetTickCount();
for(i=0;i<length;i++)
{
StringAdd(a,b);
}
stop=GetTickCount();
Print("time for 'StringAdd(a,b)' = ",(stop-start)," milliseconds, i = ",i);
//--- третий способ
a="a";c="";
start=GetTickCount();
for(i=0;i<length;i++)
{
int k=StringConcatenate(c,a,b);
//c=""; //с такой строчкой работает ещё дольше.
}
stop=GetTickCount();
Print("time for 'StringConcatenate(c,a,b)' = ",(stop-start)," milliseconds, i = ",i);
La salida es:
DR 0 DoubleToString (EURGBP,M1) 22:15:55 time for'c = a + b' = 2359 milliseconds, i = 10000000
QE 0 DoubleToString (EURGBP,M1) 22:15:56 time for'StringAdd(a,b)' = 1031 milliseconds, i = 10000000
FE 0 DoubleToString (EURGBP,M1) 22:16:00 time for'StringConcatenate(c,a,b)' = 3891 milliseconds, i = 10000000
Resulta que StringConcatenate funciona más lentamente que la unión de cadenas mediante operaciones de adición. ¿Cuál es el problema?
Pregunta. La descripción de la función StringConcatenate() dice que "StringConcatenate() funciona más rápido y con mayor economía de memoria que el enlace de cadenas mediante operaciones de adición debido a que no se utilizan variables temporales de tipo cadena". He utilizado ejemplos de la Referencia, modificándolos un poco:
Tengo la salida:
Resulta que StringConcatenate funciona más lentamente que la unión de cadenas mediante operaciones de adición. ¿Cuál es el problema?
Es un poco erróneo comprobarlo (si lo he entendido bien). El truco de la función es otra cosa...
Aproximadamente este código
////////////////////////////////////////////////////////////////////////////////// Global variables, used in working the trade system //////////////////////////////////////////////////////////////////////////////////string a="Пример";
double b=1.26,c = 1.27;
string d;
uint start,stop;
long i,length=10000000;
////////////////////////////////////////////////////////////////////////////////voidOnStart()
{
//----------------------------------------------------------------------------////Work variables//----------------------------------------------------------------------------//
start=GetTickCount();
for(i=0;i<length;i++)
{
d=a+(string)b+(string)c;
}
stop=GetTickCount();
Print("time for 'd = a + b + c' = ",(stop-start)," milliseconds, i = ",i);
//Второй способ
d= "";
start=GetTickCount();
for(i=0;i<length;i++)
{
StringAdd(d,a);
StringAdd(d,(string)b);
StringAdd(d,(string)c);
}
stop=GetTickCount();
Print("time for 'StringAdd()' = ",(stop-start)," milliseconds, i = ",i);
//Третий способ
d= "";
start=GetTickCount();
for(i=0;i<length;i++)
{
int k=StringConcatenate(d,a,b,c);
}
stop=GetTickCount();
Print("time for 'StringConcatenate(d,a,b,c)' = ",(stop-start)," milliseconds, i = ",i);
//----------------------------------------------------------------------------//
}
////////////////////////////////////////////////////////////////////////////////
Y este resultado
2011.04.1515:28:58123 (EURUSD,D1) time for'd = a + b + c' = 81094 milliseconds, i = 100000002011.04.1515:30:24123 (EURUSD,D1) time for'StringAdd()' = 85828 milliseconds, i = 100000002011.04.1515:31:46123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 81812 milliseconds, i = 100000002011.04.1515:33:36123 (EURUSD,D1) time for'd = a + b + c' = 82938 milliseconds, i = 100000002011.04.1515:35:00123 (EURUSD,D1) time for'StringAdd()' = 83859 milliseconds, i = 100000002011.04.1515:36:21123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 80719 milliseconds, i = 10000000
PS
Lo más probable es que la línea d= "" debería haberse puesto en el bucle for, pero no creo que este fallo tenga mucho efecto en el resultado.
Extraño. Necesitas el código para MQL5, que ya debería estar en la página web. Sólo hay que buscarlo. A eso me refiero exactamente.
Pero eso depende de ti.
Es una búsqueda muy tediosa, quizás alguien te lo diga.
Por cierto, he rehecho este código para mql5. Tal vez alguien pueda usarlo.
por favor, comenten:
ENUM_TRADE_RETURN_CODES
Código ID Descripción
10004 TRADE_RETCODE_REQUOTE Solicitud rechazada
10006 TRADE_RETCODE_REJECT Solicitud rechazada
...
sin código 10005. ¿No es un error?
Respetuosamente...
Pregunta. Hay una función llamada GetTickCount () - devuelve el número de milisegundos transcurridos desde que se inició el sistema. La nota dice que "el recuento está limitado por la resolución del temporizador del sistema ".Como la hora se almacena como un entero sin signo, se desborda cada 49,7 días cuando el ordenador está funcionando continuamente".
¿Y qué pasa cuando el contador se desborda? ¿Se reinicia y comienza una nueva cuenta atrás, o se congela el sistema?
Yedelkin:
¿Qué ocurre cuando el contador se desborda? ¿Se reinicia y comienza un nuevo recuento, o se congela el sistema?
Se desborda y empieza de cero.
Pregunta. La descripción de switch(expresión){...} dice que "la expresión del operador switch debe ser de tipo entero". He visto la descripción de este operador con expresiones de otros tipos en Internet. ¿Se ampliará el uso del operador switch añadiendo expresiones de tipo cadena?
Pregunta. La descripción de switch(expresión){...} dice que "la expresión del operador switch debe ser de tipo entero". He visto la descripción de este operador con expresiones de otros tipos en Internet. ¿Ampliamos el uso del operador switch añadiendo expresiones del tipo cadena?
No, por desgracia, no lo hará. Para los tipos de cadena sólo si ... si no, si ... Si no...
El uso de tipos enteros en switch acelerará el operador de switch varias veces más que si
No, desgraciadamente no lo hará. Para los tipos de cadena sólo si ... si no, si ... si no
El uso de tipos enteros en switch acelerará el código varias veces más que si
Pregunta. La descripción de la función StringConcatenate() dice que "StringConcatenate() funciona más rápido y con mayor economía de memoria que el enlace de cadenas mediante operaciones de adición, debido a que no se utilizan variables temporales de tipo cadena". He utilizado los ejemplos del Manual de Referencia, modificándolos ligeramente:
La salida es:Resulta que StringConcatenate funciona más lentamente que la unión de cadenas mediante operaciones de adición. ¿Cuál es el problema?
Pregunta. La descripción de la función StringConcatenate() dice que "StringConcatenate() funciona más rápido y con mayor economía de memoria que el enlace de cadenas mediante operaciones de adición debido a que no se utilizan variables temporales de tipo cadena". He utilizado ejemplos de la Referencia, modificándolos un poco:
Tengo la salida:Resulta que StringConcatenate funciona más lentamente que la unión de cadenas mediante operaciones de adición. ¿Cuál es el problema?
Es un poco erróneo comprobarlo (si lo he entendido bien). El truco de la función es otra cosa...
Aproximadamente este código
Y este resultado
PS
Lo más probable es que la línea d= "" debería haberse puesto en el bucle for, pero no creo que este fallo tenga mucho efecto en el resultado.