Главная страница
    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-37047
Pat
2003-01-02 18:03
2003.01.13
Запуск ДОС-приложения


7-37401
Keplin Sergey
2002-11-01 20:10
2003.01.13
Читать CD-ROM напрямую...


8-37227
Dick
2002-09-24 19:46
2003.01.13
Алгоритм


1-37049
Алексей П
2002-12-29 20:41
2003.01.13
Excel, Clipboard


1-37088
tboxer
2003-01-03 19:35
2003.01.13
string>pchar





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский