Вниз
Скачать: 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.013 c
8-37226
Aric
2002-09-25 15:44
2003.01.13
Как определить цвет пикселя в десятичном виде.


7-37403
shef
2002-10-31 17:50
2003.01.13
потоки в делфи


14-37313
Хмырь
2002-12-23 14:38
2003.01.13
Что такое winsock и с чем его едят?


14-37355
Свой
2002-12-20 11:44
2003.01.13
Создание ОС


1-37191
Anatoliy P
2002-12-30 17:47
2003.01.13
Динамическая форма




   Наверх