Вниз
Скачать: 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
4-37472
Unknown user
2002-11-26 19:57
2003.01.13
Масштабирование текста


3-36926
Дот
2002-12-17 16:42
2003.01.13
Table corrupt other than header


1-37087
NorthMan
2003-01-03 19:18
2003.01.13
Проблема с DBGrid. Прописываю в DBGridDrawColumnCell


1-37092
NorthMan
2003-01-03 12:58
2003.01.13
Народ, подскажите. Чтобы на кнопочках диалогов


14-37291
ZORRO
2002-12-20 09:51
2003.01.13
Сайт




   Наверх