Вниз
Скачать: CL | DM;

Потоки   Найти похожие ветки 

 
ed30 ©   (2002-12-30 18:41) [0]

Добрый день. Кусок кода:

procedure TForm1.Button1Click(Sender: TObject);
begin
MyThread := TMyThread.Create(False);
MyThread.FreeOnTerminate := True;
MyThread.Priority := tpLowest;
end;

procedure TMyThread.Execute;
var
i: Integer;
begin
for i := 0 to Form1.FilesList.Count - 1 do begin
if Terminated then Exit;
CreateMaket;
Synchronize(ShowResult);
if Terminated then Exit;
end;
end;

procedure TMyThread.ShowResult;
begin
Form1.ProgressBar1.StepIt;
end;


function TMyThread.CreateMaket;
var
Waiting: Boolean;
ICount: Integer;
Ext: String;
bRect: String;
TmpSt: PChar;

begin
Waiting := False;
Ext := AnsiUpperCase(ExtractFileExt(FileName));
with DataModule3.pmDdeClientConv do begin
if Ext = ".P65" then begin
TmpSt := PChar("open "" + FileName + """);
ExecuteMacro(TmpSt, Waiting);
end else begin
ExecuteMacro("new", Waiting);
ExecuteMacro("pagesize 297,420", Waiting);
TmpSt := PChar("import "" + FileName + "",0");
ExecuteMacro(TmpSt, Waiting);
ExecuteMacro("place 0,0", Waiting);
end;
ICount := 0;
repeat
ExecuteMacro("selectall", Waiting);
bRect := RequestData("getselectinfo"); //на этой строчке все останавливается
if bRect = "" then Inc(ICount);
until (PSt <> "") or (ICount > 10);
ExecuteMacro("close", Waiting);
System.Writeln(f, FileName + ": " + bRect);
if bRect = "" then Result := False
else Result := True;
end;
end;

В потоке через DDEClientConv идет управление PM. Все работает, кроме метода RequestData (приложение останавливается в этом месте и дальше не идет). Не подскажете, что я делаю не так. Если перенести метод CreateMaket в ShowResult, вызываемый из Synchronize - все работает но как-будто в основном потоке, а не в отдельном (все остальные элементы Form1 не реагируют на ввод).

Заранее спасибо. Всех с Новым Годом.


 
gsu ©   (2002-12-30 18:53) [1]

Все методы и св-ва компонент должны использовать Synchronize, поэтому у тя при переносе работает, а так нет. Скорее всего надо засинронить все конкретные процы в createmarket, которые работают с компонентами из основного потока, может - это RequestData, а может и др.


 
gsu ©   (2002-12-30 18:55) [2]

т.е. создал кнопь в новом потоке, так жми на нее, не боись, а если она у тя в основном, то Synchronize



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.012 c
3-36967
oss
2002-12-18 12:06
2003.01.13
Update ADO


1-37070
AlexKniga
2003-01-02 21:07
2003.01.13
Как из IDE Delphi отлаживать DLL?


8-37225
ych_boriss
2002-09-25 03:05
2003.01.13
icon 32x32 (or more) to icon 16x16


4-37442
Denton
2002-11-24 16:37
2003.01.13
Размер файла


1-37170
MORG@n
2002-12-29 22:07
2003.01.13
Как узнать каталог, в катором находится моя программа




   Наверх