• Domingo 19 de Mayo de 2024, 06:02

Autor Tema:  Finalizar Un Thread De Mi Aplicación  (Leído 3175 veces)

zeraf_

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Finalizar Un Thread De Mi Aplicación
« en: Domingo 24 de Septiembre de 2006, 21:32 »
0
Hola que tal, quería preguntar si hay alguna forma de finalizar un proceso de mi aplicación si solo tengo el Handle y el ThreadID del proceso. tal vez enviandole algun mensaje pero no se como, si alguien me puede ayudar.. gracias  ;)

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Finalizar Un Thread De Mi Aplicación
« Respuesta #1 en: Lunes 25 de Septiembre de 2006, 01:25 »
0
usa la funcion SendMessage de WinApi32
Citar
LRESULT SendMessage(          HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);
hWnd
[in] Handle to the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.
Msg
[in] Specifies the message to be sent.
wParam
[in] Specifies additional message-specific information.
lParam
[in] Specifies additional message-specific information.


Seria algo así:
Código: Text
  1.  
  2.   SendMessage(hWnd, WM_DESTROY, 0,0);
  3.  
  4.  
supongo que deberia funcionar.
hWnd: tendria que ser el Handel, sino la id del proceso.

zeraf_

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Finalizar Un Thread De Mi Aplicación
« Respuesta #2 en: Lunes 25 de Septiembre de 2006, 03:15 »
0
Que tal Enko, primero que todo gracias por responder, bueno ya había realizado algunas pruebas con SendMessage, como la que me planteas, pero no pude finalizar el proceso.

Lo que necesito es parar un thread o hacer que termine. Hice un ejemplo para realizar pruebas y escribi por ejemplo en el Execute de un thread esto:
Código: Text
  1.  
  2. procedure TPrograma.Execute;
  3. begin
  4.   UnEdit.Text := 'uno';
  5.   Suspend;
  6.   if not terminated then
  7.     UnEdit.Text := 'dos';
  8. end;
  9.  
  10.  
Mientras tengo el thread suspendido quiero finalizarlo e impedir que ponga por ejemplo el 'dos' en la caja de texto, pero no he logrado conseguirlo, sería enviarle un mensaje de terminar al thread pero no se como, en todo caso gracias por la ayuda que me puedan dar.


O, digamos que tengo una variable de tipo TPrograma, pero fuera del thread, en la unit de la form, y quiero por ejemplo pasar por un parámetro en el create del thread esta variable pero sería por referencia para modificar dentro del thread para que sea igual a Self, o al proceso actual, como puedo hacer esto?.

Saludos

zeraf_

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Finalizar Un Thread De Mi Aplicación
« Respuesta #3 en: Lunes 25 de Septiembre de 2006, 09:12 »
0
:D ya encontré la forma de resolver el problema, xD no había visto las funciones hasta que me dio por probar y por fin,  en todo caso muchas gracias Enko.

Así lo resolví:

 TerminateThread(HandledelThread,0);//para terminar
 ResumeThread(HandledelThread);//para resumir
 ...

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Finalizar Un Thread De Mi Aplicación
« Respuesta #4 en: Lunes 25 de Septiembre de 2006, 14:39 »
0
Me alegro que lo hayas encontrado, te soy sincero, nunca trabaje con threads poruqe no tuve necesidad. :rolleyes:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Finalizar Un Thread De Mi Aplicación
« Respuesta #5 en: Lunes 25 de Septiembre de 2006, 15:03 »
0
No podes matar un hilo y despues resumirlo ... esta muerto ... si queres pausarlo para que despues continue su ejecucion usa SuspendThread.

Matar hilos es una mala practica (suspenderlos tambien) ... lee la informacion de la MSDN al respecto de esta funcion. Si queres "comunicar" hilos vas a tener que usar funciones que te permitan trabajar con seguridad en un entorno multihilo (lease funciones de sincronizacion).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

zeraf_

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Finalizar Un Thread De Mi Aplicación
« Respuesta #6 en: Lunes 25 de Septiembre de 2006, 20:21 »
0
Ok, gracias por la aclaración Eternal Idol. Aunque no estaba matando y resumiendo, simplemente fue un ejemplo de como podía utilizar las funciones para distintos casos en los que había que matar ó resumir un hilo, por eso los comentarios y puntos suspensivos al final :).

y con respecto a resumir o matar los hilos, mejor estoy trabajando con un vector de tipo TPrograma (de la misma clase del hilo) en el que voy almacenando los hilos que se van creando y los controlo desde allí. muchas gracias por todo y por acá estaré preguntando de nuevo si me surgen más dudas, es que estoy terminando un proyecto (simulando el funcionamiento de un sistema operativo, cada hilo es un nuevo programa que se cargaba en la memoria y es por esto que debía tener la opción de matar un proceso en cualquier momento).

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Finalizar Un Thread De Mi Aplicación
« Respuesta #7 en: Lunes 25 de Septiembre de 2006, 21:36 »
0
OK, pero mejor usa alguna variable relacionada con el hilo para que este mismo se termine devolviendo el control al S.O. y no matarlo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.