키보드 / 마우스 이벤트 처리, 화면 표시, 사용자가 등록한 Idle / Timeout 함수 처리 등이 모두 이 메인 이벤트 루프에서 처리됩니다. 컨텍스트는 실행 소스 각각을 검사해서 원하는 이벤트가 발생했는지, 아니면 실행할 시간이 되었는지를 판단해 등록한 콜백함수를 호출합니다.그런데 이 메인 이벤트 루프라는 건 마냥 개념적인게 아니라, 실제로 GMain Loop 객체를 기반으로 동작합니다. 참고로, 메인 쓰레드에서 동작하기 위한 컨텍스트[ static GThread *my_thread; static GMain Loop *my_loop; static void add_idle_to_my_thread (GSource Func func, gpointer data) static void add_timeout_to_my_thread (guint interval, GSource Func func, gpointer data) static gpointer loop_func (gpointer data) static void start_my_thread (void) static void stop_my_thread (void) 를 리턴하면 한번만 실행되고 종료합니다.These libraries implement GUI elements that draw output to a computer screen and change state in response to incoming events. The majority of events are typically generated directly from user input, such as mouse movements and keyboard input.

글머리에서 적은 것처럼 비동기 메시지 큐를 이용하는 방식보다 아주 약간의 오버헤드는 있겠지만, 훨씬 더 많은 기능을 제공하는 것 같지 않나요?

Hello guys, I'm porting a C game to Mac OS X and I'm trying to get it done using Cocoa API.

This creates a higher priority thread that you can render on.

However you need to be thread safe for example when handling events on the main thread.

GLib API를 이용한 멀티쓰레드 프로그래밍에서 비동기 메시지 큐를 이용하는 방법은 지난 포스트에서 설명한 적이 있는데, 이번에는 애플 GCD의 libdispatch와 비교되는 GLib의 메인루프를 이용하는 방법을 정리해 보았습니다.

이 방법은 어떤 관점에서 보면 더 쉽고, 이미 많은 기능이 기본적으로 지원되기 때문에 몇몇 경우를 제외하면 더 좋은 방법입니다. 일반적으로 GLib / GTK 어플리케이션은 메인 쓰레드에서 실행되는 메인 이벤트 루프 기반에서 동작합니다. 소스는 파일, 파이프, 소켓 등의 디스크립터를 기반으로 한 이벤트 소스일 수도 있고, Idle / Timeout 등과 같은 시간 소스일 수도 있습니다.

Of course I need the two "apps" to run in parallel. Where I have to put the code in order to have it always running? Although this solution may require more re-writing than the previous solution.

In this blog post, we will have a look at the “main loop”, which is the engine of most Graphical User Interface (GUI) libraries.

Check out Apple's Driving Open GL Rendering Loops.