![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#14
|
||||
|
||||
![]() а чем создание потока для каждого входящего сообщения не подходит? ведь если захочется сделать ответ результатом запроса к БД или RSS ленте (web-серверу), к примеру, то время подготовки ответа может занять длительное время. не висеть же остальным "ответам" в ожидании своей очереди:
Код:
type TICQMessageThread = class(TThread) private FSender: TICQClient; FMsg, FUIN: String; protected procedure Execute; override; public constructor Create(Sender: TICQClient; Msg, UIN: String); procedure SendMessage; end; implementation constructor TICQMessageThread.Create(Sender: TICQClient; Msg, UIN: String); begin inherited Create(True); FreeOnTerminate:=True; // запомним их FSender:=Sender; FMsg:=Msg; FUIN:=UIN; Resume; end; procedure TICQMessageThread.Execute; begin // Sleep по теме :) Sleep(1000); // готовим ответ и записываем его туда, // где было входящее сообщение, т.е. в FMsg FMsg:='привет клиентик '+FUIN; // а отправлять будем в основном потоке Synchronize(SendMessage); end; procedure TICQMessageThread.SendMessage; begin // вызываем SendMessage у TICQClient FSender.SendMessage(FMsg, FUIN); end; сам обработчик входящего сообщения компонента icq: Код:
procedure TForm1.ICQMessage(Sender: TObject; Msg, UIN: String); begin TICQMessageThread.Create(icq, Msg, UIN); end; Пишу программы за еду. __________________ |