powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запуск программ
25 сообщений из 61, страница 1 из 3
Запуск программ
    #39490435
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый всем день
У меня такая проблема - пишу программу для запуска других приложений с всяческими проверками и мониторингами.
Такая проблема - мне надо, чтобы после получения настроек из ini запустили все программы одновременно, а они запускаются последовательно.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,IniFiles, StdCtrls, FIBQuery, pFIBQuery, FIBDatabase,
  pFIBDatabase;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    pFIBDatabase1: TpFIBDatabase;
    pFIBTransaction1: TpFIBTransaction;
    pFIBQuery1: TpFIBQuery;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
    tpath2: string;
    tpath1: string;

implementation

{$R *.dfm}
Function RunAppAndWait(CmdLine, WorkDir: string): boolean;     //????????? ????????? ? ???????? ??????????
Var SI: TStartupInfo;
    PI : TProcessInformation;
Begin
   ZeroMemory(@SI, SizeOf(SI));
   SI.cb := SizeOf(SI);
   Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false, 0, nil, PChar(WorkDir), SI, PI);
   If Result Then Begin
      CloseHandle(PI.hThread);
      WaitForSingleObject(PI.hProcess, INFINITE);
      CloseHandle(PI.hProcess)
   End
End;

procedure FileExi (FileDir, RunExe: string);
begin
RunAppAndWait (tpath2,tpath1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
        fini: TIniFile;
        sections: TStringList;
        tpath3: string;
        start_time: tdatetime;
        stop_time: tdatetime;

begin
        memo1.Lines.Clear;
        fini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'init.ini');
        tpath3 := ExtractFilepath(Application.ExeName);
        sections := TStringList.Create;
        fini.ReadSections(sections);
        for i :=0 to (sections.Count)-1   do begin
              memo1.Lines.Add(fini.ReadString(sections[i],'source',''));
              memo1.Lines.Add(fini.ReadString(sections[i],'apppath',''));
              tpath1:=  fini.ReadString(sections[i],'source','');
              tpath2:=  fini.ReadString(sections[i],'apppath','');
              //здесь должна быть проверка, пока её нет
              //старт приложений, как делать запуск всех сразу? В голову пришла мысль о передаче параметров в массив,
               // а как - понять не могу, опыта не хватает.
              start_time := now;
              FileExi(tpath2,tpath1);
              stop_time := now;
              pFIBQuery1.SQL.Clear;
              pFIBQuery1.SQL.Add('insert into IMPORT_TIME_LOG (START1,STOP1,KIND) values (:START1,:STOP1,:KIND)');
              pFIBTransaction1.StartTransaction;
              pFIBQuery1.ParamByName('START1').Value:= start_time;
              pFIBQuery1.ParamByName('STOP1').Value:= stop_time;
              pFIBQuery1.ParamByName('KIND').Value:= 42;
              pFIBQuery1.ExecQuery();
              pFIBTransaction1.Commit;

                                            end;
end;

...
Рейтинг: 0 / 0
Запуск программ
    #39490444
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод называется RunAppAndWait, что как бы намекает, что мы запускаем приложение и ждем, пока оно завершится.

Чтобы не ждать, можно закомментировать вот эту строчку:
WaitForSingleObject(PI.hProcess, INFINITE);
...
Рейтинг: 0 / 0
Запуск программ
    #39490446
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiМетод называется RunAppAndWait, что как бы намекает, что мы запускаем приложение и ждем, пока оно завершится.

Чтобы не ждать, можно закомментировать вот эту строчку:
WaitForSingleObject(PI.hProcess, INFINITE);
Ну да
только тогда вот эта часть:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
stop_time := now;
              pFIBQuery1.SQL.Clear;
              pFIBQuery1.SQL.Add('insert into IMPORT_TIME_LOG (START1,STOP1,KIND) values (:START1,:STOP1,:KIND)');
              pFIBTransaction1.StartTransaction;
              pFIBQuery1.ParamByName('START1').Value:= start_time;
              pFIBQuery1.ParamByName('STOP1').Value:= stop_time;
              pFIBQuery1.ParamByName('KIND').Value:= 42;
              pFIBQuery1.ExecQuery();
              pFIBTransaction1.Commit;


сработает сразу же после старта приложения, а мне нужна информация о её конце,это важно.
...
Рейтинг: 0 / 0
Запуск программ
    #39490489
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

Тогда можно через потоки сделать (запускаем отдельный поток, которые отвечает за внешнее приложение и ждет его завершения). Какая версия делфи? В новых можно использовать встроенную TParallel.For, стороннюю библиотеку OmniThreadLibrary (рекомендую), прямо средствами делфи через TThread . Можно даже без всяких потоков сделать -- обычным циклом с ожиданием (запускаем по списку, сохраняем хендлы процессов hProcess и по очереди проверяем их окончания, записывая результат и ожидая закрытия всех процессов).
...
Рейтинг: 0 / 0
Запуск программ
    #39490524
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiGallemar,
Какая версия делфи?
Классика - №7.
...
Рейтинг: 0 / 0
Запуск программ
    #39490543
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarJaDiGallemar,
Какая версия делфи?
Классика - №7.
Как сделал-бы я. :)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
type

    { TForm1 }

    TForm1 = class(TForm)
    private
        procedure OnThreadReceive(Sender: TWThread; var Msg: TThreadMessage);
    public

    end;

var
    Form1: TForm1;

implementation

{$R *.lfm}

uses dateutils;

const
    WM_START    = WM_WTHREAD_BASE + 1;
    WM_ENDED    = WM_WTHREAD_BASE + 2;

type

    { TRunThread }

    TRunThread = class(TWThread)
    public
        procedure WMStart(var Msg: TThreadMessage); message WM_START;
    end;

{ TRunThread }

procedure TRunThread.WMStart(var Msg: TThreadMessage);
var fileName: string;
begin
    // это другой поток
    fileName := FreeString(Msg.LParam);
    // run and wait
    PostMessageFromThread(WM_ENDED, 0, NewString(fileName));
    Terminate;
end;

{ TForm1 }

procedure TForm1.OnThreadReceive(Sender: TWThread; var Msg: TThreadMessage);
var fileName: string;
begin
    case Msg.Message of
        WM_ENDED: begin
            fileName := FreeString(Msg.LParam);
            // пишем в лог время получения
        end;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var w: TRunThread;
begin
    w := TRunThread.Create;
    w.FreeOnTerminate := true;
    w.OnThreadReceiveMessage := OnThreadReceive;    
    w.PostToThreadMessage(WM_START, 0, NewString('SomeFile.exe'));
    // пишем в лог время старта
end;     


Поток запускается, выполняет задачу и сообщив об окончании самоубивается.

П.С. NewString и FreeString обязательны при передаче строк между потоками.
...
Рейтинг: 0 / 0
Запуск программ
    #39490550
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarJaDiGallemar,
Какая версия делфи?
Классика - №7.
сразу же видно :)
Код: pascal
1.
2.
3.
4.
5.
{$R *.dfm}
Function RunAppAndWait(CmdLine, WorkDir: string): boolean;    //????????? ????????? ? ???????? ??????????
Var SI: TStartupInfo;
    PI : TProcessInformation;
Begin
...
Рейтинг: 0 / 0
Запуск программ
    #39490558
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокGallemarпропущено...

Классика - №7.
сразу же видно :)

Эдик, ты не прав, что это седьмая не видно, видно, что версия до D 2006 :) тут и покруче некрофилы есть.
...
Рейтинг: 0 / 0
Запуск программ
    #39490652
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarчто это седьмая не видно
семерка проще и быстрее всего ставится. Остальные известные некрофилы - это дефекатор (Д7) и чччД (Д2007)

зы. все-все... больше не оффтоплю
...
Рейтинг: 0 / 0
Запуск программ
    #39490673
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокGallemarчто это седьмая не видно
семерка проще и быстрее всего ставится. Остальные известные некрофилы - это дефекатор (Д7) и чччД (Д2007)

Хвастунов ещё. Сибиряков.
...
Рейтинг: 0 / 0
Запуск программ
    #39490802
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

Меня еще запиши - у меня проект на Д6 еще живой :)
...
Рейтинг: 0 / 0
Запуск программ
    #39490817
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тут и на Д5 попадаются
...
Рейтинг: 0 / 0
Запуск программ
    #39490832
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у нас есть пучок проектов на Д5, с 1999 года живут.
в своё время руководство поленилось озаботиться переползанием на более свежие версии,
а сейчас перетащить это окаменевшее Г и вовсе нереально (в разумные сроки).
помимо этого есть проекты на Д7 и 2009.
все новые разработки сейчас на Лазаре.
аминь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запуск программ
    #39490833
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокGallemarчто это седьмая не видно
семерка проще и быстрее всего ставится. Остальные известные некрофилы - это дефекатор (Д7) и чччД (Д2007)

зы. все-все... больше не оффтоплю

Я еще на D2006 :)
...
Рейтинг: 0 / 0
Запуск программ
    #39490929
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заоффтопили :) но я не против. Завтра кину код ,гляньте общим взором.
...
Рейтинг: 0 / 0
Запуск программ
    #39491108
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвсе новые разработки сейчас на Лазаре.
Кроссплатформа или чисто под вынь?
...
Рейтинг: 0 / 0
Запуск программ
    #39492468
Mikhalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WaitForSingleObject заменить на WaitForMultipleObjects
...
Рейтинг: 0 / 0
Запуск программ
    #39492822
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,inifiles, FIBQuery, pFIBQuery, FIBDatabase,
  pFIBDatabase;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    pFIBDatabase1: TpFIBDatabase;
    pFIBTransaction1: TpFIBTransaction;
    pFIBQuery1: TpFIBQuery;
    pFIBTransaction2: TpFIBTransaction;
    pFIBQuery2: TpFIBQuery;
    pFIBTransaction3: TpFIBTransaction;
    pFIBQuery3: TpFIBQuery;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

    TMyThread = class(TThread)
    private
    { Private declarations }
  protected
    procedure Execute; override;
    Function RunAppAndWait(CmdLine, WorkDir: string): boolean;
  end;

var
    Form1: TForm1;
    // TMyThread
    MyThread: TMyThread;
    tpath1, tpath2: string;
implementation

{$R *.dfm}
Function TMyThread.RunAppAndWait(CmdLine, WorkDir: string): boolean;     //Запустить программу и дождатся завершения
Var SI: TStartupInfo;
    PI : TProcessInformation;
Begin
   ZeroMemory(@SI, SizeOf(SI));
   SI.cb := SizeOf(SI);
   Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false, 0, nil, PChar(WorkDir), SI, PI);
   If Result Then Begin
      CloseHandle(PI.hThread);
      WaitForSingleObject(PI.hProcess, INFINITE);
      CloseHandle(PI.hProcess)
   End
End;

procedure TMyThread.Execute;
var
            start_time: tdatetime;
            stop_time: tdatetime;
            tsr : tsearchrec;
            tsr1 : tsearchrec;
begin
                    start_time := now;
                    //проверяем, есть ли файлы в каталогах
                    if FindFirst(tpath1 + '*.xls',faAnyFile,tsr1) = 0 then begin
       //есть, идем дальше
                      FindClose(tsr1);
                      Form1.pFIBQuery2.SQL.Clear;
                      Form1.pFIBQuery2.SQL.Add('insert into IMPORT_LOG (WRITE_TIME,FILE_NAME,FILE_DATE,KIND) values (current_timestamp,:FILE_NAME,:FILE_DATE,:KIND)');
                      Form1.pFIBTransaction2.StartTransaction;
                      //вытаскиваем информацию о заливаемых файлах
                      if FindFirst(tpath1 + '*.xls',faAnyFile,tsr) = 0 then
                        repeat
                            if (tsr.attr and faDirectory) = faDirectory  then Continue;
                            //записываем данные
                                      Form1.pFIBQuery2.ParamByName('FILE_NAME').Value:= tsr.name;
                                      Form1.pFIBQuery2.ParamByName('FILE_DATE').Value:= FileDateToDateTime(tsr.time);
                                      Form1.pFIBQuery2.ParamByName('KIND').Value:= 42;
                                      Form1.pFIBQuery2.ExecQuery();
                        until FindNext(tsr) <> 0;
                    Form1.pFIBTransaction2.Commit;
                    FindClose(tsr);
                    RunAppAndWait(tpath2, 'c:\S-Market\');
                    stop_time := now;
                    Form1.pFIBQuery1.SQL.Clear;
                    Form1.pFIBQuery1.SQL.Add('insert into IMPORT_TIME_LOG (START1,STOP1,KIND) values (:START1,:STOP1,:KIND)');
                    Form1.pFIBTransaction1.StartTransaction;
                    Form1.pFIBQuery1.ParamByName('START1').Value:= start_time;
                    Form1.pFIBQuery1.ParamByName('STOP1').Value:= stop_time;
                    Form1.pFIBQuery1.ParamByName('KIND').Value:= 42;
                    Form1.pFIBQuery1.ExecQuery();
                    Form1.pFIBTransaction1.Commit;
                    end else
                    //файлов нет, фиксируем холостой запуск
                           begin
                                FindClose(tsr1);
                                Form1.pFIBQuery3.SQL.Clear;
                                Form1.pFIBQuery3.SQL.Add('insert into IMPORT_EXISTS_LOG (WRITE_TIME,KIND) values (current_timestamp,:KIND)');
                                Form1.pFIBTransaction3.StartTransaction;
                                Form1.pFIBQuery3.ParamByName('KIND').Value:= 42;
                                Form1.pFIBQuery3.ExecQuery();
                                Form1.pFIBTransaction3.Commit;
                           end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
    i : integer;
    fini: TIniFile;
    sections: TStringList;
    tpath3: string;
begin
    memo1.Lines.Clear;
    fini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'init.ini');
    tpath3 := ExtractFilepath(Application.ExeName);
    sections := TStringList.Create;
    fini.ReadSections(sections);
    //проходим по настройкам, получаем пути
for i :=0 to (sections.Count)-1   do
begin
    memo1.Lines.Add(fini.ReadString(sections[i],'source',''));
    memo1.Lines.Add(fini.ReadString(sections[i],'target',''));
    tpath1:=  fini.ReadString(sections[i],'source','');
    tpath2:=  fini.ReadString(sections[i],'target','');
   MyThread:=TMyThread.Create(False);
   MyThread.Priority:=tpNormal;

end;
end;

end.


переписал в таком виде, осталась проблема - неправильно передается tpath2 и одно приложение запускается дважды.
Ini такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
[1]
source=c:\Temp\01\
target=c:\S-Market\CalcPart.exe autostart autoclose
[2]
source=c:\Temp\02\
target=c:\S-Market_load\CalcPart.exe autostart autoclose
[3]
source=c:\Temp\03\
target=C:\Windows\SysWOW64\notepad.exe
...
Рейтинг: 0 / 0
Запуск программ
    #39492836
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarнеправильно передается tpath2
Потому что потоки запускаются параллельно основному...

Потому и говорил, используй мое решение, там очередь сообщений реализована.
...
Рейтинг: 0 / 0
Запуск программ
    #39492843
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanПотому что потоки запускаются параллельно основному...

И как быть в таком случае? tpath1 передается без проблем
...
Рейтинг: 0 / 0
Запуск программ
    #39492855
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemartpath1 передается без проблем
Как раз с проблемами, т.к. к моменту реального старта 2-го или 3-го потока, там другие значения.

Посмотри на мой код: строка передается потоку (копированием), а не остается в основном потоке.
...
Рейтинг: 0 / 0
Запуск программ
    #39492883
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanПосмотри на мой код: строка передается потоку (копированием), а не остается в основном потоке.
Сделал вот так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure TMyThread.Execute;
var
            start_time: tdatetime;
            stop_time: tdatetime;
            tsr : tsearchrec;
            tsr1 : tsearchrec;
            path_files, path_exe: string;
begin
FreeOnTerminate := true;
path_files := tpath1;
path_exe := tpath2;
                    start_time := now;
                    //проверяем, есть ли файлы в каталогах
                    if FindFirst(path_files + '*.xls',faAnyFile,tsr1) = 0 then begin
       //есть, идем дальше
                      FindClose(tsr1);
                      //Form1.pFIBDatabase2.Open;
                      Form1.pFIBQuery2.SQL.Clear;
                      Form1.pFIBQuery2.SQL.Add('insert into IMPORT_LOG (WRITE_TIME,FILE_NAME,FILE_DATE,KIND) values (current_timestamp,:FILE_NAME,:FILE_DATE,:KIND)');
                      Form1.pFIBTransaction2.StartTransaction;
                      //вытаскиваем информацию о заливаемых файлах



Вроде работает, но почему то иногда одна программа может не запустится + когда запускаю отладчиком получаю ошибку с одним из запросов,причем то она есть, то её нет https://s8.hostingkartinok.com/uploads/images/2017/07/11ab422a3ddd4b36bbd319a1e9dc20c5.png
...
Рейтинг: 0 / 0
Запуск программ
    #39492895
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю в этом блоке проблема:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
FreeOnTerminate := true;
                    path_files := tpath1;
                    path_exe := tpath2;
                    start_time := now;
                    //проверяем, есть ли файлы в каталогах
                    if FindFirst(path_files + '*.xls',faAnyFile,tsr1) = 0 then begin
       //есть, идем дальше
                      FindClose(tsr1);
                      Form1.pFIBQuery2.SQL.Clear;
                      Form1.pFIBQuery2.SQL.Add('insert into IMPORT_LOG (WRITE_TIME,FILE_NAME,FILE_DATE,KIND) values (current_timestamp,:FILE_NAME,:FILE_DATE,:KIND)');
                      Form1.pFIBTransaction2.StartTransaction;
                      //вытаскиваем информацию о заливаемых файлах, файлов может быть много,нужно в базу внести инфо что мы импортировали
                      if FindFirst(path_files + '*.xls',faAnyFile,tsr) = 0 then
                        repeat
                            if (tsr.attr and faDirectory) = faDirectory  then Continue;
                            //записываем данные в запрос 
                                      Form1.pFIBQuery2.ParamByName('FILE_NAME').Value:= tsr.name;
                                      Form1.pFIBQuery2.ParamByName('FILE_DATE').Value:= FileDateToDateTime(tsr.time);
                                      Form1.pFIBQuery2.ParamByName('KIND').Value:= 42;
                                //выполняем его
                                      Form1.pFIBQuery2.ExecQuery();
                        until FindNext(tsr) <> 0;
                    Form1.pFIBTransaction2.Commit;
                    FindClose(tsr);
                    RunAppAndWait(path_exe, 'c:\S-Market\');

...
Рейтинг: 0 / 0
Запуск программ
    #39492923
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем у тебя 2 ошибки:
1. Использование глобальных переменных для параллельно выполняющихся потоков.
2. Как п.1, только теперь относительно еще и компонент фибов.

Как исправить:
1. У каждого потока прикрути свой конструктор, в который и загоняй нужные переменные и нигде кроме потока с ними не работай.
2. В каждом потоке создавай свои запросы, а еще лучше и сами соединения. Грубо говоря, из потока никаких обращений к формам и к тому, что на них лежит быть не должно.
...
Рейтинг: 0 / 0
Запуск программ
    #39492924
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanКак исправить:
1. У каждого потока прикрути свой конструктор, в который и загоняй нужные переменные и нигде кроме потока с ними не работай.
2. В каждом потоке создавай свои запросы, а еще лучше и сами соединения. Грубо говоря, из потока никаких обращений к формам и к тому, что на них лежит быть не должно.

1. Можешь примером кинуть?
2. Это как? Отдельный контейнер для фибов? Или как?
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запуск программ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]