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

Вниз

Не сробатывает событие таймера !   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.057 c
6-1152854738
Yeg
2006-07-14 09:25
2006.12.03
Фунция KoiToWin и сообщение с аттачем


15-1163362736
Nic
2006-11-12 23:18
2006.12.03
Что думаете о дизайне сайта?


2-1163044004
TMemoUser
2006-11-09 06:46
2006.12.03
Можно ли в TMemo сделать подчёркивание волнистой линиией как в Во


2-1163866345
~~~
2006-11-18 19:12
2006.12.03
Проверить существование объекта.


2-1163774426
asg.aleks
2006-11-17 17:40
2006.12.03
редактирование bdf файла из формы