Запуск разных потоков из одного окна

VolniY Strelok
Дата: 03.06.2009 17:23:57
Добрый день.
Есть программа выполняющая sql запросы на обновление\добовление.

Каздый sql запрос выполняются из отдельного потока (всего их пока 3).

Хотелось бы в момент выполнение потока выводить окно с информацией о ходе выполнения sql команд. Поэтому думаю из главного потока запускать окно с информацией а оно уже будет запускать поток с sql. Но проблема в том что придется для кждого потока создавать отдельное окно для его запуска.

Как можно вывести окно и запустить тот поток каторый мне нужен?
Barmaley57
Дата: 03.06.2009 17:31:29
Ну хотя бы перекрыть конструктор окна, а в него помимо owner'а передавать координаты нужного потока.
Petro123
Дата: 03.06.2009 17:32:46
VolniY Strelok,
выкинуть потоки, и запускать запросы с флагом Асинхронный, либо job'ы
VolniY Strelok
Дата: 03.06.2009 17:37:02
Petro123,

Это как ?
Petro123
Дата: 03.06.2009 17:55:52
ilya_er
Дата: 03.06.2009 19:19:43
VolniY Strelok
Добрый день.
Есть программа выполняющая sql запросы на обновление\добовление.

Каздый sql запрос выполняются из отдельного потока (всего их пока 3).
....
Как можно вывести окно и запустить тот поток каторый мне нужен?


По-моему, все же, отображаемое окно придется держать в основном потоке приложения.

Если не нужно отображение данных в гриде, то отображаемую информацию можно обновлять в методе, запускаемом через Synchronize. Если нужно - придется в аналогичном методе все данные загрузить в какой-нибудь MemoryDataSet либо в ClientDataSet, созданный в основном потоке приложения.

Ну, и если действительно используется ADO, подойдет решение Petro123... возможно...
VolniY Strelok
Дата: 04.06.2009 13:21:31
ilya_er,

Нет в гриде во время выполнения запросов (в потоке) не нужно нечего отоброжать.
Отоброжать окно пранирую из главного потока.
Просто несовсем ясно как лучше окну обьяснить какой поток запускать? Допустим если перекрыть конструктор окна и по мими owner'а передавать еще 1 (например) строковый параметр с названием потока? Или можно по другому?

Barmaley57 Что вы имели в виду говоря "...передавать координаты нужного потока "?
Barmaley57
Дата: 04.06.2009 13:58:18
Создаешь поток и показываешь окно, передавая указатель на поток.
Типа того:
  var mt:TMyThread;
       form:TMyForm;
  ... 
  mt:=TMyThread.Create(true);
  form:=TMyForm.Create(self,mt);
  ...
  // а, например в OnShow формы запускаешь поток
  mt.resume;

В общем вариантов куча. Зависит от задачи.
Barmaley57
Дата: 04.06.2009 13:59:05
Точнее FThread.resume :)
Barmaley57
Дата: 04.06.2009 14:00:51
P.S. FThread присваивается в конструкторе
как-то так:
constructor TMyForm.Create(AOwner:TComponent;AThread:TMyThread);
begin
  inherited Create(AOwner);
  FThread:=AThread;
end;