Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.1 c
15-1328606117
Димка На
2012-02-07 13:15
2013.03.22
Строки-константы в delphi XE


3-1277303472
VictorMBH
2010-06-23 18:31
2013.03.22
Какой инсталер нужен для инсталла BDE под 64 разрядной Windows 7


15-1332013809
V_a_d
2012-03-17 23:50
2013.03.22
PopupMenu


15-1329646997
Чайник
2012-02-19 14:23
2013.03.22
Direct 3D и Delphi 2010


15-1339590107
Хригорий
2012-06-13 16:21
2013.03.22
Что такое нативный язык программирования?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский