AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / Funciones WLanguage / Funciones estándar / Funciones de gestión de procesos / Hilos, semáforos, señales y mutex
  • Espera infinita
  • Sincronizar hilos
  • Varios
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Bloquea el hilo actual hasta que reciba una señal de otro hilo. Esta función simplifica la sincronización entre hilos sin tener que implementar una gestión avanzada de eventos.
Observación: Esta función equivale a la función EventWait utilizada con un evento automático, cuando la función ThreadSendSignal envía una señal. Por lo tanto, el evento se cierra de forma automática.
Recordatorio:
  • Un hilo es un proceso que se ejecuta en paralelo con la aplicación actual (hilo principal). Esto le permite iniciar una tarea en segundo plano (hacer una copia de seguridad, etc.).
  • Las funciones ThreadWaitSignal y ThreadSendSignal permiten sincronizar los hilos de dos en dos.
// Create an event
EventCreate("Let's go", eventManual, eventClose)
// Run a first thread
ThreadExecute("Thread1", threadNormal, "Thread_First")
// Locks the current thread until the event is obtained
ThreadWaitSignal()
 
// Run a second thread
ThreadExecute("Thread2", threadNormal, "Thread_Second")
// Locks the current thread until the event is obtained
ThreadWaitSignal()
 
// Modifies the event to run the threads
EventChange("Let's go", eventOpen)
//----------------------------------------------
PROCEDURE Thread_First()
Trace(dbgInfo(dbgProcess) + " - ThreadSendSignal(threadMain)")
ThreadSendSignal(threadMain)
EventWait("Let's go")
Trace(dbgInfo(dbgProcess) + " - Event received")
//--------------------------------------------
PROCEDURE Thread_Second()
Trace(dbgInfo(dbgProcess) + " - ThreadSendSignal(threadMain)")
ThreadSendSignal(threadMain)
EventWait("Let's go")
Trace(dbgInfo(dbgProcess) + " - Event received")
Sintaxis
<Result> = ThreadWaitSignal([<Maximum timeout>])
<Result>: Booleano
  • True si el hilo actual recibió una señal,
  • False si el hilo no recibió ninguna señal (se agotó el tiempo de espera).
<Maximum timeout>: Entero, duración o constante opcional
Tiempo máximo de espera en centésimas de segundo.
  • Si al final del tiempo especificado, el hilo no ha recibido una señal, el valor de <Resultado> es False.
  • Si no se especifica este parámetro o corresponde a la constante Infinite, la espera es infinita.
Este parámetro puede corresponder a:
  • un número entero que corresponde al número de centésimas de segundo,
  • una variable de tipo Duration,
  • la duración en un formato legible (por ejemplo, 1 s o 10 ms).
Observaciones

Espera infinita

La ejecución de un hilo se puede detener, incluso si está bloqueado en una espera infinita de un evento. Simplemente utilice ThreadStop.

Sincronizar hilos

Las funciones ThreadWaitSignal y ThreadSendSignal permiten sincronizar los hilos de dos en dos. Para sincronizar varios hilos en el mismo evento, se deben utilizar las funciones de gestión de eventos:
Observación: En los mecanismos internos de gestión de colas y pilas, no es necesario sincronizar los hilos (funciones Enqueue y Dequeue para las colas, funciones Push y Pop para las pilas).

Varios

ThreadWaitSignal se puede utilizar en un proceso relacionado a un control (código de clic de un botón, por ejemplo): en este caso, se utiliza en el hilo principal.
Componente: wd290vm.dll
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 21/06/2023

Señalar un error o enviar una sugerencia | Ayuda local