Текущий архив: 2006.08.27;
Скачать: CL | DM;
Вниз
TServerSocket, stNonBlocking несколько клиентов Найти похожие ветки
← →
Юра (2006-08-03 16:36) [0]Возник такой вопрос, навеяно serko.
Есть TServerSocket, stNonBlocking.
По событию ServerSocket1ClientRead данные читаются из сокета в буфер, буфер для каждого подключенного клиента свой. Потом в этом же обработчике вызывается процедура, которая разбирает буфер и отсылает клиенту данные в зависимости от результатов разбора.
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
//ID клиента = FindConnection(socket.handle);
//читаем в буфер клиента
//вызываем обработчик ProcessData(ID клиента);
end;
Вопрос такой: что будет, если процедура ProcessData(ID клиента) ЕЩЕ не завершена, а другой клиент пишет данные, т.е. вызывается ServerSocket1ClientRead?
На локальной сети и малом количестве машин ничего ужасного не происходило.
← →
Сергей М. © (2006-08-03 16:50) [1]В однопоточной среде - пока тело текущего обработчика не завершило свое выполнение. и один последующий обработчик в том же потоке вызван не будет.
Это примитивно как 2 х 2.
← →
Юра (2006-08-03 17:04) [2]В однопоточной среде - пока тело текущего обработчика не завершило свое выполнение. и один последующий обработчик в том же потоке вызван не будет.
----
Спасибо! Я так и думал, но иногда что-то находит и начинаешь сомневаться в аксиомах.
← →
Сергей М. © (2006-08-03 17:13) [3]Значит, знания не тверды.
← →
Германн © (2006-08-03 17:14) [4]
> В однопоточной среде - пока тело текущего обработчика не
> завершило свое выполнение. и один последующий обработчик
> в том же потоке вызван не будет.
Хм хм.
А если в "текущем" вызвать Application.ProcessMessages?
← →
Сергей М. © (2006-08-03 17:17) [5]
> Германн © (03.08.06 17:14) [4]
Ничего страшного не случится, если тела обработчиков спроектированы грамотно.
Страницы: 1 вся ветка
Текущий архив: 2006.08.27;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.042 c