Если код Delphi был написан с синхронизацией для сериализации доступа к основному потоку VCL, но этот код затем используется в приложении, отличном от VCL, будет ли он синхронизироваться с основным потоком приложения или просто не имеет никакого эффекта вообще?Возможно ли использовать синхронизацию в приложении, отличном от VCL?
Пример:
procedure TMyThread.Execute;
begin
// ... other code
Synchronize(SomeMethod);
// ...
end;
Давайте предположим, что
- это приложение не-VCL, который имеет основную нить, которая выполняется в бесконечном цикле (или до момента прекращения)
- основная нить не вызывает
CheckSynchronize
напрямую или в обработчике WakeMainThread - выполняется вторичный поток и выполняет синхронизацию (SomeMethod), как в примере выше
Будет ли винт зависать на линии Synchronize (SomeMethod)?
Это приложение, отличное от VCL, под вашим контролем? Если нет, вы не можете использовать 'Синхронизировать'. –
@DavidHeffernan Я могу представить 'synchronize (CallEventHandler)' в библиотеке, где я могу назначить метод обработчику событий. Компилятор не будет жаловаться, если это приложение, отличное от VCL. – mjn
Конечно, компилятор не будет жаловаться. Это не имеет никакого отношения к синтаксису команды или области идентификаторов. Но @David ошибочно, что вы не можете использовать 'Synchronize'. Вы можете использовать все, что хотите. Вам просто нужно публиковать, что вы используете его, чтобы потребитель вашей библиотеки знал, что нужно использовать 'CheckSynchronize'. Я не знаю, что произойдет, если хост не выполнит свою часть контракта. Не стесняйтесь писать тестовую программу и сообщать о своих результатах здесь. –