Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Потоки - проверка на существование


ply ©   (2012-05-18 18:36:00) 

Есть несколько потоков выполняющих определенные функции
Также есть таймер, запускающий эти потоки при необходимости.
Задача в том чтобы одновременно работал максимум 1 поток каждого типа.
Создаю потоки так:
thread_sms := Tsms_Payment_Thread.Create();
with thread_sms do begin
   Priority := tpLower;
   FreeOnTerminate:=true;
 end;

Вопросы:
1. Как правильно сделать проверку на существование и нормальное функционирование потока?

2. В связи с этим не возникнет ли у меня следующей проблемы: в случае если  поток зависнет либо вследствие чего-либо остановится, то новый поток просто не будет создан?


Rouse_   (2012-05-18 23:23:00) [1]


> Проверяет появились ли в БД SMS для отправки и если да -
>  отправляет их

В газенваген, SMS спамеры обсуждаем на другом форуме...


TStas   (2012-05-18 23:09:00) [2]

Я, может, чего-то не понимаю, но зачем нужны потоки, которые должны быть заведомо одинокие? Да еще и по таймеру? Чтобы программа не тормозила? Может Application.ProcessMessages просто вставить, а код ненужных потоков в основной поток программы вставить и не мучаться? Или в OnIdol проверять, если проверка маленькая. Опять же, ненужные таймеры уберутся.
Кстати, таймер для каких-то проверок, якобы паралельных основному потоку никогда не годятся. Они ведь всего навсего через Interval свой посылают сообщение основному потоку. Но если он занят чем-то важным, то сообщение это обработано не будет.
Вот положите на форму таймер и сделайте, чтобы он раз в секунду в метку писал очередное число. Пока ничего, кроме этого ничего не происходит, в метке будет написано число секунд со старта. А теперь займите окно чем-то долгим, например, поиском файла по всему компу. А потом посмотрите, что будет в метке написано. Таймер вообще не выход, да он и не для этого.


ply   (2012-05-18 22:38:00) [3]


> И вся эта работа выполняется в DoWork?

В DoWork выполняется проверка и вызывается функция отправки СМС


Германн   (2012-05-18 22:29:00) [4]


> Проверяет появились ли в БД SMS для отправки и если да -
>  отправляет их

И вся эта работа выполняется в DoWork?


ply   (2012-05-18 22:08:00) [5]


> Что делает поток, т.е. в чем смысл DoWork?

Проверяет появились ли в БД SMS для отправки и если да - отправляет их


Dennis I. Komarov   (2012-05-18 22:06:00) [6]

Что делает поток, т.е. в чем смысл DoWork?


ply   (2012-05-18 21:58:00) [7]


> задача решается путем создания одного потока на каждый тип.
>  
> потоки живут пока живет процесс.
> если для них сейчас нет работы, они ждут ее.
> тогда ничего контролировать не надо.

Спасибо, тоже к этому пришел=)
Скажите, я правильно делаю? (необходима возможность стартовать поток немедленно - делаю через публичную переменную ForceStart)

while not Terminated do begin

 //задержка с проверкой необходимости стартовать немедленно
 for i:=1 to 100 do begin
   if ForceStart then break;
   self.Sleep(10);
 end;

 DoWork;
end;


Медвежонок Пятачок   (2012-05-18 21:50:00) [8]

Задача в том чтобы одновременно работал максимум 1 поток каждого типа.

задача решается путем создания одного потока на каждый тип.
потоки живут пока живет процесс.
если для них сейчас нет работы, они ждут ее.
тогда ничего контролировать не надо.


Rouse_   (2012-05-18 21:41:00) [9]

Что за софт ты пишешь?


oldman   (2012-05-18 18:45:00) [10]


> 1. Как правильно сделать проверку на существование и нормальное
> функционирование потока?


есть такое слово - "флаг"
потоки пушкин создает?


Наверх

Титульная страница Поиск, карта сайта Написать письмо