Как называется C / C ++ программа без конца? - PullRequest
2 голосов
/ 25 июня 2010

Я имею в виду программу, основанную на событиях, «статическую» программу, которая не просто выполняет задачу, но ожидает события и т. Д. И не завершается, пока пользователь не закроет ее вручную.

РЕДАКТИРОВАТЬЯ ответил ниже, например, программы, которые мы используем каждый день и основаны на Windows, такие как Microsoft Word, Firefox и т. Д. Как называется этот тип программ?Как можно сделать что-то подобное?

РЕДАКТИРОВАТЬ 2: Я собирался ответить на некоторые ответы по отдельности, но я лучше отвечу здесь.

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

Ответы [ 8 ]

11 голосов
/ 25 июня 2010

Эти программы обычно написаны вокруг так называемого " цикла обработки событий ".

Основная функция программы, как правило, в psuedocode, выглядит примерно так:

while (!shouldClose()) {
   Event e = getEvent();
   dispatchEvent(e);
}

Где функция dispatchEvent принимает событие e, определяет, какие функции она должна вызывать, а затем вызывает эти функции с любыми параметрами для события.

getEventФункция может быть любым количеством вещей в зависимости от характера программы.Для интерактивной программы командной строки это может быть просто получение и анализ строки текста от пользователя.Для программы с графическим интерфейсом может ожидаться щелчок мыши или другие сообщения из оконной системы.Для сетевой службы это может быть ожидание входящих пакетов.

Например, в программе с графическим интерфейсом getEvent может ожидать и затем получать сообщение о щелчке мыши из оконной системы ОС.Затем dispatchEvent будет просматривать событие щелчка мыши, определять на основе координат, по какой кнопке была нажата кнопка, а затем искать объект, соответствующий этой кнопке, и вызывать buttonObject.clicked().Реализация buttonObject.clicked отвечает за выполнение любого кода, который должен быть результатом нажатия на кнопку.После завершения работы управление возвращается в цикл обработки событий и обрабатывается следующее событие.

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

5 голосов
/ 25 июня 2010

Поскольку ваше описание довольно расплывчато, оно может означать несколько вещей:

Если вы предоставите более подробную информацию, мы сможем еще больше ограничить возможности.

Обновление:

Программа, подобная Firefox илиСлово можно назвать приложение .Они обычно разрабатываются с использованием прикладных структур , написанных на разных языках программирования.

2 голосов
/ 25 июня 2010

Я бы сказал «Приложение» или «Сервис», в зависимости от того, есть графический интерфейс или нет.

Как можно что-то сделать вот так

Поскольку вы пометили свой вопрос с помощью C ++, я предполагаю, что вы хотите использовать C ++ для создания приложений для Windows, таких как Microsoft Word или Excel?

Вы можете загрузить бесплатную версию Microsoft Visual Studio C ++ Express, прочитать некоторые учебные пособия, купить книгу и начать изучать, как писать приложения. Такое приложение, как Excel, было написано командой разработчиков из более чем двадцати лет.

Существует много разных способов написания приложений для Windows, и многие люди используют для написания таких языков, кроме C ++, хотя C ++, безусловно, очень популярен для коммерческих приложений, и я считаю, что Excel и Word написаны на смеси C ++ и C.

Здесь, в StackOverflow, я насчитываю более двух десятков различных языков, используемых для написания приложений для Windows, включая Python, C ++, Java, Delphi и многие другие.

Основная структура такого приложения выглядит в Python-подобном псевдокоде следующим образом, не сильно отличаясь от C-like-кода другого ответа:

initialize_things()

while (!AreWeStoppingYet) :
     event = GetAnEvent()
     ProcessAnEvent(event)

Иногда этот маленький цикл выше является частью "структуры", как сказал кто-то другой. Другими словами, я никогда сам не пишу этот код, он написан для меня. Я часто использую Delphi, и этот маленький цикл является частью небольшого объекта под названием Application. Во многих фреймворках, включая Delphi и некоторые фреймворки C ++, этот цикл скрыт где-то в исходном коде вашей фреймворк, и вы можете даже не задумываться о том, что он там есть.

2 голосов
/ 25 июня 2010

Проще говоря, это называется «Программа, управляемая событиями» .

2 голосов
/ 25 июня 2010

Я думаю, что вы пытаетесь спросить, что вы называете программой, которая не запускается до конца. Это называется «блокирующей» программой. Это связано с тем, что он блокирует выполнение, ожидая внешних событий или входов, которые вызывают его разблокировку и выполнение некоторой работы.

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

Эти механизмы приостанавливают выполнение, не планируя выполнение заблокированного потока, пока условие, которое разблокирует конкретную операцию, не станет истинным.

1 голос
/ 25 июня 2010

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

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

Видеоигры также используют цикл событий в некотором смысле ... а играПосле этого они должны обновить мир / NPC и перерисовать кадр 60 раз в секунду, ожидая, когда пользователь введет данные для обновления символа

1 голос
/ 25 июня 2010

Ну, вам нужно, чтобы программа могла получать события, такие как:

  • ввод с клавиатуры.
  • подключение по сети (розетки и прочее).
  • другие механизмы IPC (разделяемая память, семафоры, сигналы).

Есть несколько способов сделать это.

Затем вы запускаете его на переднем плане (если вы хотите, чтобы пользователь мог легко его остановить) или как фоновый процесс в различных операционных системах (демон UNIX или служба Windows, или фоновая задача с использованием UNIX & или Windows start).

1 голос
/ 25 июня 2010

Такого рода программы обычно называются с графическим интерфейсом.

Существует множество библиотек, которые помогут вам написать графический интерфейс - в мире с открытым исходным кодом, например, GTK , который работает на многих платформах, включая Windows, и вы можете использовать его как на C, так и на C ++.

Чтобы помочь вам начать, здесь есть «Hello World»: http://library.gnome.org/devel/gtk-tutorial/stable/c39.html#SEC-HELLOWORLD

...