> For the complete documentation index, see [llms.txt](https://vala.gitbook.io/vala/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vala.gitbook.io/vala/advanced-features/main-loop.md).

# Главный цикл(The Main Loop)

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

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

```csharp
void main() {

    var loop = new MainLoop();
    var time = new TimeoutSource(2000);

    time.set_callback(() => {
        stdout.printf("Time!\n");
        loop.quit();
        return false;
    });

    time.attach(loop.get_context());

    loop.run();
}
```

При использовании GTK+ главный цикл создается автоматически и запускается, когда вызывается метод Gtk.main(). Он обозначает точку, когда программа готова запуститься и начать принимать сообщения от пользователя или откуда-то еще. Код на GTK+ эквивалентен примеру выше, поэтому вы можете добавлять источники событий схожим образом. Однако для управления главным циклом вы должны использовать методы GTK+.

```csharp
void main(string[] args) {

    Gtk.init(ref args);
    var time = new TimeoutSource(2000);

    time.set_callback(() => {
        stdout.printf("Время!\n");
        Gtk.main_quit();
        return false;
    });

    time.attach(null);

    Gtk.main();
}
```

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

Для более подробной информации о циклах сообщений смотрите документацию по GLib и GTK+.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://vala.gitbook.io/vala/advanced-features/main-loop.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
