Si el código Delphi se escribió con sincronización para serializar el acceso al hilo VCL principal, pero este código se usa en una aplicación que no es VCL, ¿se sincronizará con el hilo principal de la aplicación o simplemente no tendrá ningún efecto?¿Es peligroso usar la sincronización en una aplicación que no sea VCL?
Ejemplo:
procedure TMyThread.Execute;
begin
// ... other code
Synchronize(SomeMethod);
// ...
end;
Asumamos
- es una aplicación no VCL que tiene un hilo principal, que se ejecuta en un bucle sin fin (o hasta su terminación)
- el hilo principal no llama al
CheckSynchronize
directamente o en un controlador WakeMainThread - un subproceso secundario se ejecuta y ejecuta Sincronizar (SomeMethod) como en el ejemplo anterior
¿Se bloqueará el subproceso en la línea Sincronizar (SomeMethod)?
¿La aplicación sin VCL está bajo su control? Si no, entonces no puede usar 'Sincronizar'. –
@DavidHeffernan Puedo imaginar un 'synchronize (CallEventHandler)' en una biblioteca donde puedo asignar un método al controlador de eventos. El compilador no se quejará si no es una aplicación de VCL. – mjn
Por supuesto, el compilador no se quejará. No tiene nada que ver con la sintaxis del comando o el alcance de los identificadores. Pero @David está equivocado al decir que no puedes usar 'Sincronizar'. Puedes usarlo todo lo que quieras. Solo tiene que publicar que lo está usando para que el consumidor de su biblioteca sepa usar 'CheckSynchronize'. Sin embargo, no sé qué sucederá si el anfitrión no cumple con su parte del contrato. Siéntase libre de escribir un programa de prueba e informar sus propios resultados aquí. –