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

Вниз

Резидентное консольное application   Найти похожие ветки 

 
alt7   (2003-04-29 13:23) [0]

Какова общая концепция, как сделать? То есть висит себе в памяти, по поступлении информации на сокет, обрабатывает и рассылает другим компам, то есть одновременно и клиент и сервер.

Как сделать чтоб не прога не заканчивала работу?


 
Digitman   (2003-04-29 13:25) [1]


> Как сделать чтоб не прога не заканчивала работу


при правильном алгоритме самой "проги" - не пускать юзера к клаве)


 
Dms   (2003-04-29 13:26) [2]

бесконечный цикл


 
alt7   (2003-04-29 13:28) [3]

Будет висеть на сервере резидентом. Ну просто ведь в консольном приложении выполнился код от begin к end и все. А надо, чтоб постоянно висело.


 
pasha_golub   (2003-04-29 13:32) [4]

Обрабатывай собственное сообщение от другой проги...
1. Запускаешь консольное в цикле
2. А когда захочешь закрыть, запускаешь другую прогу в которой отправляешь сообщение консольной. Консольная реагирует и себя закрывает.

Ну а шоб постоянно висело while true do <operator>;

Но естесно, так делать не нада! :-)


 
Digitman   (2003-04-29 13:35) [5]


> просто ведь в консольном приложении выполнился код от begin
> к end и все


при таких вот "заявлениях" - не рановато ты взялся за клиент-серверные приложения ?) ... может, Паскаль подучить хотя бы еще чуть-чуть ?)


 
Digitman   (2003-04-29 13:39) [6]


> alt7


Коль на то уж пошло, то осмелюсь заметить, уважаемый, что и в любом приложении, написанном в Делфи, "выполнился код от begin к end и все")


 
alt7   (2003-04-29 13:41) [7]

to DigitMan: уже лет 5-6. Просто консольные резиденты не писал никогда.


 
Dms   (2003-04-29 13:49) [8]

после 5-6 лет строгого режима создаются "консольные резиденты"


 
alt7   (2003-04-29 13:50) [9]

Хватит языком трепать умники если нечего сказать


 
Anatoly Podgoretsky   (2003-04-29 13:51) [10]

begin к end
И это как то препятствует?


 
Digitman   (2003-04-29 13:53) [11]


> alt7



> Просто консольные резиденты не писал никогда.


и никогда не напишешь) ... ибо в Win32 нет обособленного понятия "резидентности" : все процессы одинаково "резидентны")

пиши любое приложение в Делфи (хоть консольное хоть неконсольное) - и вот тебе готовый "резидент" !


 
alt7   (2003-04-29 15:03) [12]

А вот такая конструкция: (не срабатывает событие, почему?)

EventClass = class(TObject)
...
procedure IdTelnetDataAvailable(Buffer: String);
...

vIdTelnet.OnDataAvailable := EvClass.IdTelnetDataAvailable;

И в блоке begin .. end:

while true do
begin
Application.ProcessMessages;
end;

OnTimer события срабатывают, а это нет. Почему?


 
Digitman   (2003-04-29 15:14) [13]

приводи полностью все что у тебя между begin .. end.


 
alt7   (2003-04-29 15:17) [14]

Нечто вот такое
begin
EvClass := EventClass.Create;
Timer1sec := TTimer.Create(nil); Timer1sec.Enabled := false; Timer1sec.Interval := 1000;
Timer30sec := TTimer.Create(nil); Timer30sec.Enabled := false; Timer30sec.Interval := 30000;
Timer5min := TTimer.Create(nil); Timer5min.Enabled := false; Timer5min.Interval := 299000;
TimerCotStart := TTimer.Create(nil); TimerCotStart.Enabled := true; TimerCotStart.Interval := 1000;
TimerToMod5min := TTimer.Create(nil); TimerToMod5min.Enabled := false; TimerToMod5min.Interval := 1000;
vIdDayTime := TIdDayTime.Create(nil); vIdDayTime.Host := <skip>; vIdDayTime.Port := <skip>;
vIdTelnetSrv := TIdTelnetServer.Create(nil); vIdTelnetSrv.DefaultPort := <skip>;
vIdTelnet := TIdTelnet.Create(nil); vIdTelnet.Host := <skip>; vIdTelnet.Port := <skip>; vIdTelnet.UseNagle := true;


Timer1sec.OnTimer := EvClass.Timer1secTimer;
Timer30sec.OnTimer := EvClass.Timer30secTimer;
Timer5min.OnTimer := EvClass.Timer5minTimer;
TimerCotStart.OnTimer := EvClass.TimerCotStartTimer;
TimerToMod5min.OnTimer := EvClass.TimerToMod5minTimer;
vIdTelnet.OnDataAvailable := EvClass.IdTelnetDataAvailable;
vIdTelnetSrv.OnExecute := EvClass.IdTelnetSrvExecute;
vIdTelnetSrv.OnAuthentication := EvClass.IdTelnetSrvAuthentication;

for vi := 1 to 4 do
arrS_5min[vi] := "0";
Timer30Sec.Enabled := True;
for vi := 1 to 4 do
gl_5minchanged[vi] := "0";
vIdTelnetSrv.Active := true;
vIdTelnet.Connect;

while true do
begin
Application.ProcessMessages;
end;

vIdTelnet.Disconnect;

EvClass.Free;
Timer1sec.Free; Timer30sec.Free; Timer5min.Free; TimerCotStart.Free; TimerToMod5min.Free;
vIdDayTime.Free; vIdTelnetSrv.Free; vIdTelnet.Free;
end.


 
Digitman   (2003-04-29 15:26) [15]

1. зачем столько таймеров ? Достаточного одного с интервалов в секунду

2. в чем прелесть реализации приложения как консольного ? все его преимущества ты свел на нет, задействовав модуль Forms


 
alt7   (2003-04-29 15:36) [16]

Forms -> Application Messages -> Чтобы срабатывали события.
Куча таймеров -> Бо хитрая система анализа того что приходит с сокета, надо потом графики строить будет, уже клиентом другим.

Но вот почему не работает событие OnDataAvailable, вот вопрос.
Причем события TIdTelnetServer тоже срабатывают


 
Digitman   (2003-04-29 15:40) [17]


> Forms -> Application Messages -> Чтобы срабатывали события.


ну так создай обычное приложение, набросай компоненты на форму - и всех делов ! зачем консоль-то ? что ты выигрываешь в этом случае ? абсолютно ничего !


> Бо хитрая система анализа того что приходит с сокета


все это делается одним-единственным таймером)))



 
alt7   (2003-04-29 15:45) [18]

У меня уже было обычное приложение если ты не догадался, (придет начальство предложу) ;))

Не знаешь системы не говори, как ты одним таймером определишь что прошло 30 секунд, 5 минут с одной точки отсчета?

Вот что насчет события...


 
Digitman   (2003-04-29 15:52) [19]


> Не знаешь системы не говори, как ты одним таймером определишь
> что прошло 30 секунд, 5 минут с одной точки отсчета?


)))))))))

ставь интервал = 500 (пол-минуты)

одно событие возникло - прошло полминуты
два события возникло - прошла минута
десять событий возникло - прошло 5 минут

чего ж еще надо-то ?) ставь нужные счетчики в ЕДИНСТВЕННЫЙ обработчик события ЕДИНСТВЕННОГО таймера - и считай на здоровье !))


> У меня уже было обычное приложение если ты не догадался


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


 
alt7   (2003-04-29 16:03) [20]

Не все так просто. Таймеры то включаются, то выключаются. Причем то 2 работают 3 отдыхают, то наоборот, то еще как.


 
Digitman   (2003-04-29 16:06) [21]


> Не все так просто. Таймеры то включаются, то выключаются.
> Причем то 2 работают 3 отдыхают, то наоборот, то еще как.
>


ну и выставляй переменные-флажки, разрешающие/запрещяющие/обнуляющие соответствующие "счетчики" !

ты ж пойми - навернув косой десяток таймеров ты ресурсы процесса бестолково отнимаешь !


 
alt7   (2003-04-29 16:09) [22]

ну ладно, подумаю. Вот с OnDataAvailable косяк. В исходнике все правильно? Ведь все другие события обрабатываются


 
Digitman   (2003-04-29 16:15) [23]


> alt7



> ну ладно, подумаю


вот-вот) ... подумай ! а то сразу демагогию устроил "знаешь систему" - "не знаешь систему"))

а "косяк" проще всего устраняется переносом всего, что начудил здесь, в обычное GUI-приложение на форму)


 
Dmitry Rogov   (2003-04-29 18:13) [24]

ИМХО, такие вещи делаются сервисами.



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

Форум: "Основная";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.006 c
11-34383
ODUVAN
2002-08-01 20:23
2003.05.12
Не могу поймать сообщения от мыши в SysTray!!!


1-34501
Konstantionov
2003-04-30 01:46
2003.05.12
Установка свойств компонента по умолчанию


14-34590
Evgeny
2003-04-24 08:58
2003.05.12
Справочная система Delphi


3-34345
Rise
2003-04-22 13:03
2003.05.12
DBGrid и Fileds?


3-34376
From_X
2003-04-21 17:22
2003.05.12
Временная таблица в Оракле, а есть ли ?...





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