Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
1-37065
Dmitriy2001
2003-01-02 23:06
2003.01.13
Подскажите пожалуйста, как в компоненте TreeView задать Node


1-37184
beginer1
2002-12-30 09:32
2003.01.13
СОртировка


3-36928
Antah
2002-12-17 13:56
2003.01.13
Проблема с запросом SELECT FROM WHERE LIKE


4-37422
maxim2
2002-11-22 13:24
2003.01.13
Почему не работает PlaySound


1-37156
Boger
2002-12-29 14:45
2003.01.13
thread и synchronize





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский