Форум: "Основная";
Текущий архив: 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.005 c