Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2011, 00:29   #11
QunneD
C++ & PHP & Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

Цитата:
Не знаю доступно ли я рассказал, просто реальную задачу очень долго рассказывать.
Вешать на каждую переменную таймер и каждую секунду проверять. Сильно нагруженно и нерационально, хотелось бы обойтись например одним таймером.
Дабы сильно не нагружать, и чтобы всё было правильно, предлагаю использовать API функции SetTimer/KillTimer.

Если реализовываешь всё на переменных, то соответственно, задаешь интервал для таймера в размере 1000 мс (1 сек), и ежесекундно отнимаешь у каждой переменной в цикле 1000 мс, и если значение <= 0, то выполняем определенное действие.

Надеюсь смысл понятен, если все-таки нет, то тебе необходимо более подробно объяснить механизм твоей системы.

И не стоит бояться API функций, с ними работать намного проще чем с GUI-шными компонентами.
QunneD вне форума Ответить с цитированием
Старый 05.12.2011, 00:32   #12
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ну зачем же такой гемерой!!

Если у вас интрнет-кафе, значит все ПК связаны в сеть, а значит на каждом ПК можно поставить самописный клиент который, получив команду от сервера будет считать оплаченое время, попутно синхронизируясь с сервером. По окончании известит сервер и прибьёт всякий доступ к ПК(просто заблокировав мышь и клаву).


Сервер в свою очередь ведёт учет работы клиентов и может посылать/принимать команды(Стоп,старт, изменить время работы и т.д.).


Во всяком случае такой вариант куда лучше.
Человек_Борща вне форума Ответить с цитированием
Старый 05.12.2011, 00:34   #13
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Цитата:
Сообщение от QunneD Посмотреть сообщение
задаешь интервал для таймера в размере 1000 мс (1 сек), и ежесекундно отнимаешь у каждой переменной в цикле 1000 мс
Вот именно этого я хочу и избежать. Что-то делать каждую секунду и эту каждую секунду отнимать например у сотни переменных.
На самом деле - это не нагрузка на ЦПУ, но как минимум выглядит оно уже неправильно.
С приходом Гигабайтов ОЗУ и Гигагерцов ЦПУ - программисты перестали бороться за лишний такт и лишний байт, а это неправильно ИМХО.

Последний раз редактировалось Небесный; 05.12.2011 в 00:39.
Небесный вне форума Ответить с цитированием
Старый 05.12.2011, 00:39   #14
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Ну зачем же такой гемерой!!

Если у вас интрнет-кафе, значит все ПК связаны в сеть, а значит на каждом ПК можно поставить самописный клиент который, получив команду от сервера будет считать оплаченое время, попутно синхронизируясь с сервером. По окончании известит сервер и прибьёт всякий доступ к ПК(просто заблокировав мышь и клаву).


Сервер в свою очередь ведёт учет работы клиентов и может посылать/принимать команды(Стоп,старт, изменить время работы и т.д.).


Во всяком случае такой вариант куда лучше.
Случай - пропал свет, и пропало время на компе.
На клиенских компах писать что-то в файлы или куда там - это уже не то, как думаю клиента нужно максимально сделать простым, получил команду разблокировался, получил команду заблокировался - думаю это более гуманно.
Сделать, чтобы клиент давал команду серверу, чтобы он писал - лишний гемор ганять трафик и лишние функции.

В случае со светом (бесперебойниками не запасешься - исхожу из реалий жизни, которые приходилось уже проходить), сервер будет держать у себя полную базу, как со временем, списывать время например каждые 5 минут, тоесть пишемся в файлы каждые 5 минут, или в СУБД, неважно что там. Свет пропал, потом появился, включаем компы, запускаем сервер, сервер видит, что время есть - запускает клиенские станции.

Вот для чего такой гемор.

Последний раз редактировалось Небесный; 05.12.2011 в 00:41.
Небесный вне форума Ответить с цитированием
Старый 05.12.2011, 00:39   #15
QunneD
C++ &amp;amp; PHP &amp;amp; Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

Цитата:
На самом деле - это не нагрузка на ЦПУ, но как минимум выглядит оно уже неправильно.
Захватываем область памяти, и производим действие, когда необходимо освобождаем память.

Нагрузки абсолютно никакой не будет, Вы пугаетесь напрасно.

Как другой вариант, кто мешает вместо 1000 мс, сделать скажем 60000 мс?

З.ы.: Если не понятно было, то таймер нужен всего один, отсюда то и цикл необходим.
QunneD вне форума Ответить с цитированием
Старый 05.12.2011, 00:47   #16
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Если необходимо предусмотреть аварийную ситуацию на сервере, то лучше, на мой взгляд, сделать проверку каждую 1 мин.
То есть через каждую 1 мин, идет отнимание велечин времени и запись в БД. Этим самым мы не сильно нагружаем главный компьютер даже при большом количестве компьютеров, но теряем точность. При расчете, если мы считаем время исходя из определенной суммы, то полученное значение времени округляем до минут (то есть не учитываем секунды).
Желательно использовать для обработки значение, полученное путем суммирование начального времени + проплачиное время и сравнивать с системным временем, а таймер только для выполнения "события".
Идей много, даже не знаю что и как будет вернее.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 05.12.2011 в 00:57.
chertovich вне форума Ответить с цитированием
Старый 05.12.2011, 01:02   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если сервер и СУБД, то сервер по таймеру раз в 1-5 минут обращается к СУБД, анализирует и изменяет данные, при необходимости блокирует нужные компьютеры. СУБД обязательно с поддержкой транзакций, например FIREBIRD.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
timer(vc++) NiCola999 Windows Forms 13 31.01.2011 06:00
timer Erick Cartman Помощь студентам 4 12.03.2010 19:57
Timer Arhangel_bes Помощь студентам 2 27.10.2008 17:55
timer ZYRGiX Помощь студентам 3 21.07.2008 15:15
timer Toxa Компоненты Delphi 6 06.12.2006 06:58