Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-05-2014
rcuevas rcuevas is offline
Miembro
 
Registrado: nov 2006
Ubicación: Rosas - Gerona - España
Posts: 39
Poder: 0
rcuevas Va por buen camino
Hola mamcx,

Entiendo el concepto del bucle de los eventos. Aún así, muchas gracias por la explicación.

Intentaré resumir las dudas con las siguientes preguntar:
- Quien genera y encola los eventos del timer? Qué thread? El thread principal u otro thread? Yo apuesto por el thread principal.
- Cuando genera y encola el evento del timer? Yo supongo que cuando está libre y se percata de que ya ha pasado el tiempo establecido.
- Cuántos eventos genera y encola cuando se da cuenta de que ha llegado la hora? 1? O tantos como hibiesen sido generados si no hubiese estado ocupado? Yo creo que debería generar sólo uno.
- Una vez generado y encolado un evento, cuanto tarda en generar y encolar un nuevo evento? Yo creo que, desde que generó el ultimo evento, debería esperar el tiempo establecido en el timer, por lo menos.

Compila y ejecuta la aplicación. Veras los comportamientos q describo en mi mensaje inicial.

Saludos y gracias.
Responder Con Cita
  #2  
Antiguo 23-05-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Mucha de la respuesta esta en:

http://stackoverflow.com/questions/1...-threading-app

Basicamente: El API de windows es quien controla todo. TTimer es solo un wraper. Este es creado en el thread ppal. Los links que te pase responden el resto.
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 26-05-2014
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Recordando un tema similar, busqué "TTimer+funcionamiento site:www.clubdelphi.com" en Google, lo cual me llevó a este hilo de los foros:

http://www.clubdelphi.com/foros/showthread.php?t=73908

No se trata de ninguna explicación magistral, pero de algo puede servir. Aplica de igual forma a Delphi y a C++Builder.
Responder Con Cita
  #4  
Antiguo 26-05-2014
rcuevas rcuevas is offline
Miembro
 
Registrado: nov 2006
Ubicación: Rosas - Gerona - España
Posts: 39
Poder: 0
rcuevas Va por buen camino
Buenos días Al González,

Tras leer tus indicaciones, tengo claro que el sistema operativo es quien genera los eventos del timer. Algo que no sabía.
Pero sigo sin tener claro cuándo los genera, porque, según lo que veo en mi aplicación, mientras el proceso está dormido mediante un sleep, el sistema operativo sólo genera un evento, cuando le hubiese dado tiempo a generar 5!! Si los eventos los ha de generar el sistema operativo cada segundo, y nuestro programa ha pasado 5 segundos dormidos, es lógico que durante esos 5 segundos no haya tratado ningún evento, pero no es lógico que el sistema operativo, que no ha estado durmiendo, no haya generado 5 eventos...

Bien, seguiremos investigando.

Gracias por tu ayuda.
Responder Con Cita
  #5  
Antiguo 26-05-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Si has leido los links que te pase? Porque todas las preguntas ya estan respondidas a este punto.

No sabes ingles?
__________________
El malabarista.
Responder Con Cita
  #6  
Antiguo 26-05-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por rcuevas Ver Mensaje
Pero sigo sin tener claro cuándo los genera, porque, según lo que veo en mi aplicación, mientras el proceso está dormido mediante un sleep, el sistema operativo sólo genera un evento, cuando le hubiese dado tiempo a generar 5!! Si los eventos los ha de generar el sistema operativo cada segundo, y nuestro programa ha pasado 5 segundos dormidos, es lógico que durante esos 5 segundos no haya tratado ningún evento, pero no es lógico que el sistema operativo, que no ha estado durmiendo, no haya generado 5 eventos...
mamcx te ha querido decir que el sleep duerme el hilo, es decir, el bucle de mensajes, por lo que el S.O. no puede generar el evento, ya que el hilo simplemente no procesa el mensaje. Si quieres evitar ese efecto, debes tener otro hilo, con su bucle de mensajes, que responda...


Saludos.
Responder Con Cita
  #7  
Antiguo 27-05-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por escafandra Ver Mensaje
mamcx te ha querido decir que el sleep duerme el hilo.
Que es exactamente lo que pasa, recuerda, es un INTERRUP y eso aplica a todo el thread. Por eso, el OS no puede enviar nada al thread, esta pausado! asi que mientras esta pausado, este "ignora" al thread.

Lo cual esta explicado en los links, por ejemplo:

Cita:
any code that resides inside a timer event handler (for this type of timer class) is executed using the application's UI thread. During idle time, the UI thread is also responsible for processing all messages in the application's Windows message queue. This includes Windows API messages as well as the Tick events raised by this timer class. The UI thread processes these messages whenever your application isn't busy doing something else.
Asi que no le des vueltas. Todo esta sucediendo tal como se ha explicado y no hay ningun comportamiento "anomalo" ni inesperado. Recuerda que al usar el API del OS, estas cooperando y siguiendo con su forma de hacer las cosas, y una app GUI igual esta construida sobre el mismo, asi que no es extraño que trabajen al unisono si se reutilizan aspectos de la misma API subyacente.
__________________
El malabarista.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como guardar en postgresql (como trabaja el datamodule) mematanlimon Lazarus, FreePascal, Kylix, etc. 0 15-02-2010 19:06:12
Como se trabaja con ejecutables? alloger C++ Builder 2 13-10-2006 12:42:54
Como se trabaja la Clausula Like en delphi Shidalis OOP 4 26-08-2005 16:18:51
Codigo de la tecla F3 Como cuando se trabaja un enter en vez de un TAB jmedina Varios 4 08-07-2004 16:05:21
Como trabaja RecordCount de las Tablas Paradox??? JamesBond_Mx Conexión con bases de datos 12 06-04-2004 16:42:48


La franja horaria es GMT +2. Ahora son las 12:17:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi