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

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


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

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

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

что то я не понимаю в этой жизни
...
Рейтинг: 0 / 0
что где и как в THread
    #32289759
ОпломбOFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АУУУУУУУУ
знатоки вы где ?
...
Рейтинг: 0 / 0
что где и как в THread
    #32290888
Кщд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. код, где создается-вызывается тред
2. код треда
...
Рейтинг: 0 / 0
что где и как в THread
    #32290973
ОпломбOFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в смысле в такой последовательности переписать модули ?
...
Рейтинг: 0 / 0
что где и как в THread
    #32290997
Кщд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в смысле не имея перед глазами кода, разговаривать не о чем :)
код?
...
Рейтинг: 0 / 0
что где и как в THread
    #32291017
ОпломбOFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
что где и как в THread
    #32291109
Кщд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
интересовал кусок кода, где вызывается Execute...
да ладно...
рекомендации в общем случае такие:
в треде определяем процедуру с таким кодом :
while not terminated do yourthread.Execute

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

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

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

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


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

terminate а тем более free не вызывается всё тормозит на suspend
поток ждёт пока цикл мать его кончит слов нет уже писать чего делать
...
Рейтинг: 0 / 0
что где и как в THread
    #32292179
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
что где и как в THread
    #32303959
ОпломбOFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / что где и как в THread
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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