Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.51 MB
Время: 0.046 c
15-1163485918
KygECHuK
2006-11-14 09:31
2006.12.03
Маленький вопрос


15-1163428818
AntiUser
2006-11-13 17:40
2006.12.03
Возможна ли смена IP на имя?


3-1159443609
Alex870
2006-09-28 15:40
2006.12.03
Обновление TADOTable


1-1161766957
rif
2006-10-25 13:02
2006.12.03
Выпадение приложения


5-1144508062
Volodya_
2006-04-08 18:54
2006.12.03
TMediaPlayer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский