powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как правильно заморозить поток из самого себя?
25 сообщений из 74, страница 2 из 3
Как правильно заморозить поток из самого себя?
    #40050191
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

тебе дали 100% работающий код, а ты булькаешь не посмотрев его?
Или тут сложные конструкции?
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050214
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Sleep(1000) перед Continue да и все.
Смысла нет, если можно заменить на Wait(1000) и не ждать секунду при закрытии.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050249
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
такс... а тут используется Application.ProcessMessages;
а для потоков это норм?
Конечно нет. Application.ProcessMessages и Sleep() имеет смысл вызывать только для отладки тестовых приложений. Больше никогда
X11
Т.е. просто минус убрать?
или еще что-то менять надо?
И что значит "Так сразу можно установить время срабатывания"?
Ну открой уже документацию
X11
когда задействовал эту функцию Wait()
то madExcept по завершеню работы программы выдал просто ТУЧУ resource leaks
Явных утечек в коде нет. Конечно если ты не вставил Application.ProcessMessages
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050261
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Смысла нет, если можно заменить на Wait(1000) и не ждать секунду при закрытии.


я написал, что после Wait madExcept выдает кучу leaks
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050285
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
я написал, что после Wait madExcept выдает кучу leaks


я так понял, что если завершить работу приложения во время Wait(), то не выполняется деструктор потока и куча объектов тоже не удаляется поэтому.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050290
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Секунду перед закрытием можно и подождать.
Ничего страшного.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050295
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подождать до утра? Цель Wait() ждать до назначенного времени, например, до 8ми утра.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050304
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается, что внутрь Wait нужно куда-то втиснуть корректно деструктор Destroy?

Когда я закрываю программу, то вот эта бряка не выполняется.
Я имею ввиду, что при закрытии программы, всё что после Wait не выполняется.

Т.е. нужно как-то заставить поток завершаться корректно, с выполнением деструктора.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050305
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
тебе дали 100% работающий код, а ты булькаешь не посмотрев его?
Или тут сложные конструкции?


Извини, к своему сожалению я там не нашел чего-то легко исправит мою проблему.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050311
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,
а чем тебя не устроил предложенный мной вариант? Чуть измененный твой код. 22288865 Тикает раз в 5 сек, вне диапазона времени рассылки снова ждет, во время рассылки делает действие и после этого ждет. Чтобы не ожидая, закончить работу, "взводишь" событие из основного потока. Да, вариант не универсальный, а для конкретного случая, при других временных константах может быть будет не очень хорош, но при этих условиях решает задачу.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050316
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
YuRock
Смысла нет, если можно заменить на Wait(1000) и не ждать секунду при закрытии.


я написал, что после Wait madExcept выдает кучу leaks

Я не знаю, что такое madExcept. Так или иначе, утечки ресурсов происходят в одном единственном случае: если забывать их освобождать.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050320
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
X11
я написал, что после Wait madExcept выдает кучу leaks


я так понял, что если завершить работу приложения во время Wait(), то не выполняется деструктор потока и куча объектов тоже не удаляется поэтому.

завершить работу приложения во время Wait невозможно. Разве что TerminateProcess или ExitProcess.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050321
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
YuRock,

Секунду перед закрытием можно и подождать.
Ничего страшного.
Не вижу смысла. Даже строчек кода столько же. Меня лично раздражают эти лишние секунды. Секунда там, секунда здесь...
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050322
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
завершить работу приложения во время Wait невозможно. Разве что TerminateProcess или ExitProcess.
И зачем ты тогда предлагаешь wait?
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050324
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatИ зачем ты тогда предлагаешь wait?

В надежде, что топикстартер не полный идиот и догадается ждать не просто время, а сигнал
"завершись". Хотя мог бы уже понять...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050326
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
YuRock
завершить работу приложения во время Wait невозможно. Разве что TerminateProcess или ExitProcess.
И зачем ты тогда предлагаешь wait?
Затем, что при использовании Wait (в отличие от Sleep) перед завершением приложения можно выйти из Wait.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050327
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

я пытаюсь
понять
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050333
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
льзовании Wait (в отличие от Sleep) перед завершением приложения можно выйти из Wait.


т.е.
Until (lBusy = WAIT_OBJECT_0) or (lBusy <> ???);

т.е. что правильно подставить вместо ???
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050338
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
YuRock
льзовании Wait (в отличие от Sleep) перед завершением приложения можно выйти из Wait.


т.е.
Until (lBusy = WAIT_OBJECT_0) or (lBusy <> ???);

т.е. что правильно подставить вместо ???

Ничего не подставить. Просто Wait и всё.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TMyThread.Execute;
begin
  while not Terminalted do begin
    if ВремяПришло then
      Отправка почты;

    Wait(60000);
  end;
end;


А в деструкторе потока:
Код: pascal
1.
2.
3.
4.
5.
6.
procedure TMyThread.Destroy;
begin
  Terminate;
  SetEvent;
  inherited Destroy;
end;
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050339
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я вообще запутался.
Как я ранее писал, Destroy не выполняется.

и зачем там Terminate и SetEvent?
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050341
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Как я ранее писал, Destroy не выполняется.
Значит, его никто не вызывает. А зря.

X11
и зачем там Terminate и SetEvent?

Terminate - чтобы свойство Terminated стало =True.
SetEvent - чтобы прервался Wait.
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050348
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И чтобы потом вся это кривобайда упала на обращении к освобождённому объекту. Великолепно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050349
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создание
Код: pascal
1.
2.
3.
4.
5.
6.
SendNotifyThread := TSendNotifyThread.Create(True, DM.UniConnection1.ConnectString);
SendNotifyThread.FreeOnTerminate   := True;
...
...
...
SendNotifyThread.Start;




деструктор вызывается, если выполнить SendNotifyThread.Terminate;

вот код при закрытии приложения:
Код: pascal
1.
2.
3.
4.
5.
6.
    if Assigned(SendNotifyThread) then
    begin
      SendNotifyThread.Terminate;
      SetEvent(SendNotifyThread.EventHandle);
      SendNotifyThread := nil;
    end;



а вот если нужно принудительно остановить работу потока:
Код: pascal
1.
2.
3.
4.
SendNotifyThread.StopSendNotify := true;
SendNotifyThread.Terminate;
SetEvent(SendNotifyThread.EventHandle);
SendNotifyThread := nil;
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050350
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
И чтобы потом вся это кривобайда упала на обращении к освобождённому объекту. Великолепно.
Освобождение объекта (или хэндла) эвента - после inherited Destroy (после этого Execute уже гарантированно завершен). Я это не писал даже, как и создание.
Или ты о чем?
...
Рейтинг: 0 / 0
Как правильно заморозить поток из самого себя?
    #40050353
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Код: pascal
1.
SendNotifyThread.FreeOnTerminate   := True;


1. У тебя в потоке вечный цикл. Какой нахрен FreeOnTerminate??? Убери это. Как и CreateSuspended=True - только лишняя строка Start из-за этого (ее тоже выкинь). Все создавай в конструкторе потока.

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


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