Delphi: отправка сообщения по сети

Форум для программистов

Сообщение Arhitektor » Пн ноя 08, 2004 3:36 am

Доброе время суток!

Для отправки сообщния по сети использую функцию (см. ниже). Проблема в том, чо когда пользователей много и в цикле начинаешь им посылать сообщения. то программа не отвечает на запросы (становится недоступной). После отсылки сообщений все в порядке.

Вопрос:
Каким образом можно ускорить рассылку сообщений при помощи данной функции?

function NetSend(Dest, Source, Msg: string): Longint;
type
TNetMessageBufferSendFunction = function(servername,
msgname,
fromname: PWideChar;
buf: PWideChar;
buflen: Cardinal): Longint; stdcall;
var
NetMessageBufferSend: TNetMessageBufferSendFunction;
SourceWideChar: PWideChar;
DestWideChar: PWideChar;
MessagetextWideChar: PWideChar;
Handle: THandle;
begin
Handle := LoadLibrary('NETAPI32.DLL');
if Handle = 0 then
begin
Result := GetLastError;
Exit;
end;
@NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend');
if @NetMessageBufferSend = nil then
begin
Result := GetLastError;
Exit;
end;
MessagetextWideChar := nil;
try
GetMem(MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
GetMem(DestWideChar, 20 * SizeOf(WideChar) + 1);
StringToWideChar(Msg, MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
StringToWideChar(Dest, DestWideChar, 20 * SizeOf(WideChar) + 1);
if Source = '' then
Result := NetMessageBufferSend(nil, DestWideChar, nil,
MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1)
else
begin
GetMem(SourceWideChar, 20 * SizeOf(WideChar) + 1);
StringToWideChar(Source, SourceWideChar, 20 * SizeOf(WideChar) + 1);
Result := NetMessageBufferSend(nil, DestWideChar, SourceWideChar,
MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
FreeMem(SourceWideChar);
end;
finally
FreeMem(MessagetextWideChar);
FreeLibrary(Handle);
end;
end;
Arhitektor
Рядовой
 
Сообщений: 5
Зарегистрирован: Пт июл 30, 2004 3:51 am
Пункты репутации: 0

Сообщение poiuytr » Пн ноя 08, 2004 6:34 pm

Между вызовами функции попробуй вставлять Applcation.ProcessMessages().
Ну или отсылай сообщений в отдельном потоке.
Hasta la victoria siempre!
poiuytr
Капитан
 
Сообщений: 233
Зарегистрирован: Ср авг 14, 2002 6:04 pm
Откуда: Рига, Латвия
Пункты репутации: 0


Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

cron