Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / что где и как в THread / 16 сообщений из 16, страница 1 из 1
09.10.2003, 15:31
    #32289044
ОпломбOFF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
при запуске приложения отдельным потоком считываю данные из одной базы и пишу их после обработки в другую
время от времени при выходе поток всё ещё висит до перезапуска машины
как правильно запустить а потом убить поток
всё делал по книжному вроде должно работать как надо
но видимо необходим практический совет того кто уже пощупал эти потоки
жду.............................
...
Рейтинг: 0 / 0
10.10.2003, 10:12
    #32289592
ОпломбOFF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
Неужели никто не использует THRead.
Просветите если есть что то получше ?
...
Рейтинг: 0 / 0
10.10.2003, 10:25
    #32289608
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
Потоку нужно дипломатично предложить завершиться. А его код должен быть таким, чтобы в любой момент это предложение принять и корректно обработать.
В самом крайнем случае можно использовать TerminateThread. Но почему это лучше не делать описано в MSDN. Правда M$ иногда и сам ее использует, например в SQL сервере.
...
Рейтинг: 0 / 0
10.10.2003, 10:35
    #32289627
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
Еще хочу добавить, что никто еще не отменял пошаговую отладку с одновременным поглядыванием на закдадку TaskManager'а, где присутствует информация о кол-ве потоков, процессов, хэндлов и т.д. на ТЕКУЩИЙ момент.
...
Рейтинг: 0 / 0
10.10.2003, 10:48
    #32289653
ОпломбOFF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
причину нашёл но как обойти ?
в 1 модуле создание потока
во 2 сам поток
в 3 функции которые поток вызывает пока крутится

в одной из функций цикл вертится иногда достаточно долго
поток висит изза того что цикл не завершён
а вертется он может и 15 минут


логично сделать так

while ... do
begin
if terminated then break;
...
...
end;

но эта сволочь говорит что не знает что за terminated такой
вполне логично было бы прописать в uses имя unit 'a с потоком
прописываю
кричит circular unit reference

что то я не понимаю в этой жизни
...
Рейтинг: 0 / 0
10.10.2003, 11:57
    #32289759
ОпломбOFF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
АУУУУУУУУ
знатоки вы где ?
...
Рейтинг: 0 / 0
13.10.2003, 08:21
    #32290888
Кщд
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
1. код, где создается-вызывается тред
2. код треда
...
Рейтинг: 0 / 0
13.10.2003, 10:07
    #32290973
ОпломбOFF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
в смысле в такой последовательности переписать модули ?
...
Рейтинг: 0 / 0
13.10.2003, 10:40
    #32290997
Кщд
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
в смысле не имея перед глазами кода, разговаривать не о чем :)
код?
...
Рейтинг: 0 / 0
13.10.2003, 11:11
    #32291017
ОпломбOFF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
Main

procedure TfrmMain.BtnReadClick(Sender: TObject);
var
SQLQuery: String;
DataTime: TDateTime;
begin
Screen.Cursor := crHourGlass;
...
...
T1 := THBase.Create(false);
Screen.Cursor := crDefault;
end;

THRead

procedure THBase.Execute;
var
i: integer;
begin
SetName;
FreeOnTerminate := true;
ReadBase(ReadIni('Path', 'FileName'),
ReadIni('Path', 'BasePath'));
end;


ну и в ReadBase читаю и обрабатываю записи
...
Рейтинг: 0 / 0
13.10.2003, 12:25
    #32291109
Кщд
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
интересовал кусок кода, где вызывается Execute...
да ладно...
рекомендации в общем случае такие:
в треде определяем процедуру с таким кодом :
while not terminated do yourthread.Execute

в основном потоке там, где Вам надо, уничтожаем тред следующим образом:

yourthread.Terminate;
yourthread.WaitFor;
...
Рейтинг: 0 / 0
13.10.2003, 13:19
    #32291185
ОпломбOFF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
Не понял а при
T1 := THBase.Create(false);
что вызывается
я же его сразу запускаю
и потом у меня проблема прервать цикл чтобы поток мог спокойно умереть
потому что если я вышел из приложения то надобности ждать пока он завершится нет

while ... do
begin
if terminated then break;
...
...
end;

но эта сволочь говорит что не знает что за terminated такой
вполне логично было бы прописать в uses имя unit'a с потоком
прописываю
кричит circular unit reference


Вот где собака порылась !!!
...
Рейтинг: 0 / 0
13.10.2003, 13:44
    #32291220
Кщд
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
1. Секций uses - 2 в каждом юните
2. метод terminate вообще вызывается?
...
Рейтинг: 0 / 0
13.10.2003, 13:51
    #32291230
ОпломбOFF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
THRead вызывается во 2 секции uses модуля Main

terminate а тем более free не вызывается всё тормозит на suspend
поток ждёт пока цикл мать его кончит слов нет уже писать чего делать
...
Рейтинг: 0 / 0
14.10.2003, 09:18
    #32292179
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
procedure THBase.Execute; 
var 
  i: integer; 
begin 
  SetName; 
  FreeOnTerminate := true; 
  ReadBase(ReadIni('Path', 'FileName'), ReadIni('Path', 'BasePath'), @self.Terminated); 
end; 

procedure ReadBase (...; term: Pointer);
begin
  while ... do 
  begin 
    if Boolean(term^) then 
      break; 
  ... 
  ... 
  end;
end; 

...
Рейтинг: 0 / 0
24.10.2003, 10:37
    #32303959
ОпломбOFF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что где и как в THread
.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / что где и как в THread / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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