Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Еще вопрос по потокам (TThread )и базам данных


Автор: BoBo 3.10.2003, 11:21
 Здравствуйте,
Вот незадачка:

Два потока один должен всавлять запись, другой изменять
Значит, первый поток вставляет запись, выдает Showmessage,
а второй поток ждет пока я не нажму ОК на ShowMessage, а затем только
выполняется. А мне необходимо чтобы второй поток не ждал моего нажатия

Что посоветуете ?
Вот фрагменты  кода

...
Код

var
 T1,T2: TableThread;
begin
 T1:=TableThread.Create(true);
 T1.Query:=Query1;
 T1.id:=0; // будет вставка записи
 T1.FreeOnTerminate:=false;

 T2:=TableThread.Create(true);
 T2.Query:=Query1;
 T2.id:=1; //  будет модификация записи
 T2.FreeOnTerminate:=false;

// синхронизация потоков
procedure TableThread.Execute;
begin
  repeat
   Synchronize (ProcessTable);
  until Terminated;
end; 

//то, что должно выполняться
procedure TableThread.ProcessTable;
 begin
  case id of
  0: begin
   Query.SQL.Clear;

   Query.SQL.Add('update tabl ');
   Query.SQL.Add('set str = "wwwww"');
   Query.ExecSQL;
   showMessage('1 st Thread  - OK');
    end;

   1: begin
     Query.SQL.Clear;
     Query.SQL.Add('insert into tabl (id,str)');
     Query.SQL.Add('values (1, "___")');
     Query.ExecSQL;
  showMessage('2 nd Thread - OK');
      end;
  end;
  suspend;
 end;

 

Автор: pavelv 8.8.2006, 10:39
Переменную булевскую сделай(глобальную конечно), как только 1ый закончился ставь её в true. Во втором потоке перед выполнением сделай что-нибудь в духе
Код

while not bool do
begin
end;

Если поток не распознает изменение переменной попробуй Application.ProcessMessage(вообще должно и без этого обойтись). Если и тут не поможет то таймер тебе в помощь.

ADD: дямс, писал ответ в своей теме и решил помочь темам которые снизу светились как якобы: "Вы смотрели...?" А теме уже 3ий год идёт.

Автор: Romikgy 8.8.2006, 10:50
Читайте это 
http://forum.vingrad.ru/index.php?showtopic=60076

Автор: Snowy 8.8.2006, 11:13
ShowMessage всегда выполняется в главном потоке.
Юзай MessageBox с хэндлом 0.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)