Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Потоки - проверка на существование   Найти похожие ветки 

 
ply ©   (2012-05-18 18:36) [0]

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

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

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


 
oldman ©   (2012-05-18 18:45) [1]


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


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


 
Rouse_ ©   (2012-05-18 21:41) [2]

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


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

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

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


 
ply ©   (2012-05-18 21:58) [4]


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

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

while not Terminated do begin

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

 DoWork;
end;


 
Dennis I. Komarov ©   (2012-05-18 22:06) [5]

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


 
ply ©   (2012-05-18 22:08) [6]


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

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


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


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

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


 
ply ©   (2012-05-18 22:38) [8]


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

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


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

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


 
Rouse_ ©   (2012-05-18 23:23) [10]


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

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



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.079 c
15-1343593203
alexdn
2012-07-30 00:20
2013.03.22
Марс


15-1344107027
Прогер
2012-08-04 23:03
2013.03.22
Делегаты и функторы.


11-1243667969
Dy1
2009-05-30 11:19
2013.03.22
потоки


3-1286948670
Ciberrus
2010-10-13 09:44
2013.03.22
ошибка property already defined by lookup field


2-1329473098
harisma
2012-02-17 14:04
2013.03.22
Библиотека типов в Делфи