Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.03;
Скачать: CL | DM;

Вниз

NMStrm+клиент/сервер   Найти похожие ветки 

 
kostik78ua   (2002-07-31 14:53) [0]

У меня загадка природы!
Есть приложение-клиент и приложение-сервер. Надо переслать с сервера на клиент файл. Использую TNMStrm и TNMStrmServ.
На сервере ставлю кнопку с обработчиком:
var
stm: TMemoryStream;
begin
stm := TMemoryStream.Create;
try
stm.LoadFromFile("c:\somefile.exe");
NMStrm1.PostIt(stm);
finally
stm.Free;
end;
end;

На клиенте все работает классно. Но когда я создаю метод интерфейса:

procedure TRDMServ.SendData;
begin
Form1.Button1.Click;
end;

То на PostIt - подвисает.
То есть когда вручную кликаешь на кнопку - работает, а с клиента вызываешь Click - не работает.
Кто может сказать - ПОЧЕМУ ???


 
Digitman ©   (2002-07-31 17:28) [1]

Потому что - скорее всего - в момент выполнения TRDMServ.SendData не выполняется условие GetCurrentThreadId = MainThreadId.

Иными словами - нет синхронизации non-threadsafe-метода Click() с основным потоком


 
kostik78ua   (2002-08-01 09:36) [2]

Действительно, работает в разных Thread-ах.
Извиняюсь за дилетантский вопрос: А как делается эта синхронизация?


 
Digitman ©   (2002-08-01 10:08) [3]

А зачем усложнять в данном конкретном случае ?
У тебя само тело процедуры Click() - thread-safe.
Вот и оформи его в виде отдельного процедурного метода, не зависящего от визуальных контролов формы :

procedure TRDMServ.DoPostFile;
var
stm: TMemoryStream;
begin
stm := TMemoryStream.Create;
try
stm.LoadFromFile("c:\somefile.exe");
NMStrm1.PostIt(stm);
finally
stm.Free;
end;
end;

procedure TRDMServ.SendData;
begin
DoPostFile;
end;

Form1.Button1.Click;

procedure TForm1.Button1Click(Sender: TObject);
begin
DoPostFile;
end;



 
kostik78ua   (2002-08-01 10:33) [4]

Все равно не получилось. :(
Очень не хотелось бы Вас грузить, но не могли бы Вы глянуть мой код (все лишнее я уберу)?
Плз, а то я уже 3-й день над этим долбаюсь, и не могу понять в чем заковырка. Вроде бы все "как по учебнику".
Я вышлю Вам на e-mail.



 
Digitman ©   (2002-08-01 10:39) [5]

Для начала скажи - что не работает


 
kostik78ua   (2002-08-01 11:25) [6]

На PostIt виснет



Страницы: 1 вся ветка

Текущий архив: 2002.10.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
1-8001
Cr@sh
2002-09-21 09:07
2002.10.03
Проблема с жпег в имэйдже.


4-8230
Yaro
2002-08-18 14:59
2002.10.03
Как узнать закрыт ли процесс, созданный CreateProcess?


1-8049
Карлсон
2002-09-22 15:05
2002.10.03
преобразование времени.


3-7869
Шурик Ш
2002-09-12 14:52
2002.10.03
Drag&Drop: Источник DBGrid


14-8120
RV
2002-09-02 10:00
2002.10.03
---|Ветка была без названия|---