Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вызов асинхронных функций


Автор: Andrei82 9.5.2004, 17:39
Здравствуйте.

У меня возникла проблема с использованием асинхронной функции WSAAsyncGetHostByAddr(), но вероятно, что эта проблема характерна для любых асинхронных функций.

Суть такова.
Вызываю функцию N раз в цикле. Получаю N ненулевых значений (handle). То есть все N заданий (tasks) должны находиться в процессе выполнения. Так ли это на самом деле? Далее процедура, которая вызывается при получении сообщения от WSAAsyncGetHostByAddr() выполняется N раз, но ПОСЛЕДОВАТЕЛЬНО. Т.е. я ожидал, что все N заданий будут выполняться ПАРАЛЛЕЛЬНО и одновременно вернут мне результат. Но оказалось, что это не так, т.е. равносильно тому, если бы я вызывал функцию N раз последовательно, дождавшись получения результата.

Почему так? Как добиться одновременного выполнения асинхронных функций?

Спасибо

Автор: <Spawn> 9.5.2004, 20:16
То что в этих функциях написано Async не значит что они выполняются асинхронно в прямом смысле, а означает что эти функции используют асинхрнонную\неблокирующую модель работы WinSock. Что бы их выполнить примерно параллельно тебе нужно создать N-ое количество потоков, все их повесить на WaitForSingleObject, после чего освободить обьект синхронизации, что бы все потоки эти выполнились примерно одновременно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)