Cómo comprobar si una orden está seleccionada - página 18

 
En realidad el error está en el primer post, a diferencia del topicstarter yo tengo todas las jugadas escritas, es decir, sólo escribo sobre lo que se ha probado
 
keekkenen:
no importa lo que pienses sobre cómo escribir el código, lo principal es que el código funcione correctamente, en lugar de traer tu código y preguntar dónde te equivocas... una vez más, no hay error 4105 si la entrada es correcta

Lo que dices es falso, porque el error 4105 se produce al llamar a funciones a las que no es necesario pasar el ticket.

Por ejemplo, cuando se llama a OrderTicket() si no se llamó a OrderSelect() antes de llamar a OrderTicket() - esta es la situación que se discute en este hilo.

 

No, lo que quería decir era una selección garantizada de mi orden para cada una de las funciones independientemente de las transiciones (salidas) hacia el exterior.

es decir, guardar la última orden seleccionada para cada función de su

 
FAQ:

No, lo que quería decir era una selección garantizada de mi orden para cada una de las funciones independientemente de las transiciones (salidas) hacia el exterior.

es decir, guardar la última orden seleccionada para cada función como su propia

Si hay varias funciones anidadas con el control del último orden seleccionado, es decir, una función llama a otra y la otra llama a una tercera, entonces cada función mantendrá la selección del orden en el momento en que sea llamada y devolverá la selección a ese estado al regresar, si he entendido bien la pregunta. Pero esta es una solución realmente complicada. Por lo general, es poco probable que haya más de un nivel de anidamiento. Lo principal es controlar el entorno de cada una de estas funciones, de modo que una llamada a esta función no provoque errores lógicos debido a la reposición de una selección de orden anterior. Esto sólo es necesario para las funciones de servicio que pueden ser llamadas desde el bucle principal de recuperación de pedidos y seguir recuperando los propios pedidos para calcular cualquier cosa.

 

Por cierto, parece que si la función de servicio está en la biblioteca - entonces no hay necesidad de guardar el "puntero"(selección de orden), ¿verdad? Dado que el EA principal y la biblioteca tienen su propio "puntero", es decir, una orden seleccionada en la biblioteca no se seleccionará en el EA y viceversa.

Esto parece una solución perfecta al problema si las funciones A y B no se encuentran dentro del mismo módulo

 

Ideología: tener una función de selección de orden (una para todos) con los filtros necesarios fuera (de todos modos, en cada función hay que seleccionar este orden en algún lugar (muy probablemente al principio))

int OrdersTicket(filters, int function_id, bool new = false){static int tickets[functions count];int ticket = -1;
   if(!new){
      if(OrderSelect(tickets[function_id],SELECT_BY_TICKET)){return(OrderTicket());}
   }
   // Выбор и возврат тикета ордера с нужными фильтрами
   return(ticket);
}

que seguramente devolverá el ticket de la orden elegida anteriormente (en esta función), o bien hacer una nueva búsqueda con los filtros que hayamos especificado

En este caso, la construcción ticket = OrdersTicket(); funcionará perfectamente.

 
Ant_TL:

Lo que dices es falso, porque el error 4105 se produce al llamar a funciones a las que no es necesario pasar un ticket.

Por ejemplo, cuando se llama a OrderTicket() si no se llamó a OrderSelect() antes de llamar a OrderTicket() - esta es la situación que se discute en este hilo.


¿de dónde sacas el ticket de la configuración de EA, archivo externo - de dónde?

si es así, entonces sí, habrá un error, porque el hecho de llamar a OrderSelect( ) se mantiene al inicio en los siguientes ticks (al menos en el probador),...

 
Ant_TL:

Por cierto, parece que si la función de servicio está en la biblioteca - entonces no hay necesidad de guardar el "puntero" (selección de orden), ¿verdad? Dado que el EA principal y la biblioteca tienen su propio "puntero", es decir, una orden seleccionada en la biblioteca no se seleccionará en el EA y viceversa.

Esto parece una solución perfecta al problema si las funciones A y B no se encuentran dentro del mismo módulo


Todo depende del grado de globalidad de la variable externa.
 
Ant_TL:

Por cierto, parece que si la función de servicio está en la biblioteca - entonces no hay necesidad de guardar el "puntero" (selección de orden), ¿verdad? Dado que el EA principal y la biblioteca tienen su propio "puntero", es decir, una orden seleccionada en la biblioteca no se seleccionará en el EA y viceversa.

Esto parece una solución perfecta al problema si las funciones A y B no se encuentran dentro del mismo módulo


Yo paso. No puedo ayudarte con nada más. ¡¡¡Gira y gira sin mí!!!
 
FAQ:

Todo depende de lo global que sea la variable externa.

En concreto, el "puntero" -el estado de laselección de orden actual- es global dentro del módulo, es decir, este puntero es el mismo para la biblioteca y diferente para el módulo del programa. Esto significa que si la función A en el programa selecciona algún orden en el bucle y luego llama a la función auxiliar B de la biblioteca, entonces incluso si durante su operación B selecciona otro orden, la selección de orden en la función A no debe ser cambiada al regreso. Pero si ambas funciones se encuentran dentro de un módulo, al regresar de B, la selección de orden actual debe ser almacenada y restaurada antes y después de que B sea llamado en A mismo o en B al inicio y al terminar su trabajo para que la lógica del trabajo de A no sea violada en ese punto.