Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизНе сробатывает событие таймера ! Найти похожие ветки
← →
KyRo (2006-11-16 17:22) [0]Подскажите чего не срабатывает событие.
TimerServerWork:=TTimer.Create(nil);
TimerServerWork.OnTimer:=TimerServerWorkOnTimer;
TimerServerWork.Interval:=5000;
TimerServerWork.Enabled:=True;
TimerServerWorkOnTimer оглашена такTImgLoadThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
procedure ServerClientError(Sender: TObject;Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure TimerServerWorkOnTimer(Sender: TObject);
Procedure SendClients;
public
constructor Create(CreateSuspennded: Boolean; const NomHread:string);
end;
И вот сам обрабочтчик
procedure TImgLoadThread.TimerServerWorkOnTimer(Sender: TObject);
begin
TimerServerWork.Enabled:=False;
if ServerIMG.Active
then
begin
if TimerCount*TimerServerWork.Interval > 60000
then
TimerServerWork.Interval:=9000
else
inc(TimerCount);
TimerServerWork.Enabled:=True;
end
else
begin
TimerServerWork.Interval:=9000;
end;
end;
Вот этот обработчик не срабатывает хоть таймер запущен .
Подскажите что я не правильно делаю ?? Может не правильну оглашаю
← →
sniknik © (2006-11-16 17:52) [1]нет цикла выборки событий в твоем потоке.
смысла в самом таймере в потоке тоже впрочем нет... все заменяется одним sleep().
← →
KyRo (2006-11-16 17:56) [2]
> sniknik © (16.11.06 17:52) [1]
> нет цикла выборки событий в твоем потоке.
>
> смысла в самом таймере в потоке тоже впрочем нет... все
> заменяется одним sleep().
То есть можно по подробнее , а то что то я о таком не слышал !!
← →
sniknik © (2006-11-16 18:12) [3]посмотри исходники метода Application.Run; где и реализован цикл выборки сообщений основного потока. тебе нужно сделать аналогичное чтобы работал таймер (он работает посылая сообщение в основной, по которому выполняется процедура ему назначенная)
по sleep есть в справке... просто усыпление потока, отдача управления другим на время (почти таймер... у тебя же есть цикл в потоке? вот там прям на месте и ставь ожидание до выполнения нужного).
← →
API © (2006-11-16 18:20) [4]Еще один умник пытается таймер в потоке разместить. Далеко не первый. Интересно, откуда это, из какой статьи или книги?
← →
KyRo (2006-11-16 18:26) [5]
> API © (16.11.06 18:20) [4]
> Еще один умник пытается таймер в потоке разместить. Далеко
> не первый. Интересно, откуда это, из какой статьи или книги?
>
это не статья или книга , а просто мне надо сделать таймаут.
А вообще нельзя не одно события сделать в потоке или только таймера ?
← →
API © (2006-11-16 18:37) [6]А вообще нельзя не одно события сделать в потоке или только таймера ?
Можно все что угодно. Только с умом.
Тебе таймаут внутри потока? Пиши: Sleep(<Интервал в милисекундах>);
И убери таймер из потока. Забудь. (До поры до времени, а то, кто знает, может, и действительно когда-то тебе припечет тамер в потоке сделать...)
← →
Leonid Troyanovsky © (2006-11-16 18:38) [7]
> API © (16.11.06 18:20) [4]
> Еще один умник пытается таймер в потоке разместить. Далеко
> не первый. Интересно, откуда это, из какой статьи или книги?
На самом деле, это не так уж и интересно.
Сам недавно убедился, по смежной тематике.
Т.е., после допросов назовут пару-тройку многотиражных изданий,
на что придется сказать лишь "гм".
--
Regards, LVT.
Кста, мне этот ник даже больше нравиться.
← →
Leonid Troyanovsky © (2006-11-16 18:52) [8]
> KyRo (16.11.06 18:26) [5]
> А вообще нельзя не одно события сделать в потоке или только
> таймера ?
В потоке можно сделать не одно событие, и не только таймера.
--
Regards, LVT.
← →
KyRo (2006-11-16 19:09) [9]Если убрать тогда подскажите как сделать лучше.
Я создаю в потоке сервер TServerSocket и запускаю его. К нему через некоторое время конектится клиент.
Клиент может быть и не активный (то есть не приконектится)
вот его я таймером и жду и если его нет завершаю итерацию и перехажу к следующему клиенту , а не просто приостановление потока .
И еще такой вопрос события сервера TServerSocket у меня в потоке тоже надо будет через очередь делать или же они будут срабатывать ?
← →
API © (2006-11-16 19:28) [10]Кста, мне этот ник даже больше нравиться.
Уговорил!.. :-)
← →
API © (2006-11-16 19:30) [11]Клиент может быть и не активный (то есть не приконектится)
вот его я таймером и жду и если его нет завершаю итерацию и перехажу к следующему клиенту , а не просто приостановление потока .
Распиши пошагово, что твой поток в цикле делает.
← →
Anatoly Podgoretsky © (2006-11-16 20:38) [12]> KyRo (16.11.2006 17:22:00) [0]
А таймер Пушкин потом будет включать?
← →
Сергей М. © (2006-11-17 08:29) [13]
> события сервера TServerSocket у меня в потоке тоже надо
> будет через очередь делать или же они будут срабатывать
> ?
Да, вышеупомянутый цикл и здесь обязателен.
← →
KyRo (2006-11-17 10:27) [14]
> API © (16.11.06 19:30) [11]
> Клиент может быть и не активный (то есть не приконектится)
> вот его я таймером и жду и если его нет завершаю итерацию
> и перехажу к следующему клиенту , а не просто приостановление
> потока .
>
> Распиши пошагово, что твой поток в цикле делает.
Если пошагово . То у меня есть программа клиент которая стоит в сети на например 20 комп (Они могут быть включены а могут быть нет). И если включены то мне надо залить на них файлы.
Так вот в цикле я делаю .
Первым делом я читаю ини файл который является файлом конфигурации
какой файл куда заливать.
Далее я посылаю при помощи Synchronize() и основного потока на котором
лежит компонент TClientSocket команду клиентскому приложению что бы он начал конектится и запускаю сервер.
Если клиент к нему конектится передаю файл. Если не конектится определенное время то обрываю конект(То есть компьютер щас выключен и команда не дошла. Вот тут мне и нужен таймер что бы подождать минуту пока приконектится клиент). И далее перехожу к следующему клиенту который описан в ини файле.
Да в основном потоке на таймерах работают свои задания . То есть надо делать в нити что бы его не занимать.
Если кто то может предложить как лучше все это сделать - предложите. !
> Anatoly Podgoretsky © (16.11.06 20:38) [12]
> > KyRo (16.11.2006 17:22:00) [0]
>
> А таймер Пушкин потом будет включать?
> Подскажите чего не срабатывает событие.
>
>
> TimerServerWork:=TTimer.Create(nil);
> TimerServerWork.OnTimer:=TimerServerWorkOnTimer;
> TimerServerWork.Interval:=5000;
> TimerServerWork.Enabled:=True;
Вот создаю и включаю !!!
← →
Сергей М. © (2006-11-17 10:53) [15]
> KyRo (17.11.06 10:27) [14]
Мало что понял из этого ..
> основного потока на котором
> лежит компонент TClientSocket
Вот это вообще бред - компонент не может "лежать на потоке".
← →
KyRo (2006-11-17 11:25) [16]
> > KyRo (17.11.06 10:27) [14]
>
>
> Мало что понял из этого ..
Это не сильно важно !! Главное сделать сервер в потоке ! И что бы у него работали события
>
> > основного потока на котором
> > лежит компонент TClientSocket
Ну я имею ввиду главную форму
← →
Сергей М. © (2006-11-17 11:33) [17]
> Главное сделать сервер в потоке
> лежит компонент TClientSocket
И опять я ничего не понял ...
Какое отношение к серверным ф-циям приложения имеет компонент TClientSocket
?
И каков глубинный смысл синхронизации обращений к TClientSocket ?
Почему нельзя создать TClientSocket прямо в доп.потоке и обращаться к нему непосредственно безо всяких синхронизаций ?
> что бы у него работали события
Тебе уже сказано, что для этого нужно - тот самый "волшебный" цикл.
← →
Anatoly Podgoretsky © (2006-11-17 12:01) [18]> KyRo (17.11.2006 10:27:14) [14]
Да хотя бы в функции в конце включить таймер
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.047 c