gmainloop 예제

이 함수를 여러 번 호출할 수 있지만 성능에 영향을 미칠 수 있으므로 권장되지 않습니다. 예를 들어 GSourceFuncs의 “확인” 함수에서 이름을 변경하여 소스 이름에 이벤트 유형과 같은 세부 정보를 포함할 수 있습니다. 아래 예제에서는 기본 원칙을 보여 주지만 아래에서 설명하는 편리한 방법이 있습니다. 일부 예제에는 특정 플러그인이 필요하므로 실행하려고 할 때 플러그인이 설치되어 있는지 확인하십시오. 또한 플러그인을 사용하는 예제에서는 프로세스 중 모드와 프로세스 외 모드를 모두 사용할 수 있습니다. 오프 프로세스 모드에서 플러그인을 사용 하려면, mafw-dbus 래퍼를 사용 하 여 실행 하는 플러그인을 가지고 있는지 확인 합니다. 플러그인을 사용 하 여 프로세스에서, 이 모드에서 로드 하는 플러그인 플러그인 플러그인 파일 경로 (.so 파일)의 콜론 분리 된 목록에 환경 변수 MAFW_INP_PLUGINS를 정의할 수 있습니다. 예를 들어 아래 코드는 스레드에서 두 개의 쓰기를 병렬로 수행하는 GTask를 실행합니다. 쓰기에 대한 콜백은 작업자 스레드에서 디스패치되는 반면 작업의 콜백은 전체적으로 흥미로운 컨텍스트에서 디스패치됩니다.

내부적으로 비동기적으로 사물을 작성하고(적절한 경우 GTask사용) 특정 GMainContext에서 g_main_context_iteration()를 호출하여 구현할 수 있는 API의 최상위 수준에 동기 래퍼를 유지합니다. 다시 말하지만, 이것은 미래의 리팩터링을 더 쉽게 만듭니다. 이는 위의 예에서 설명합니다: 스레드는 g_output_stream_write()가 아닌 g_output_stream_write()를 사용합니다. 대신 작업자 스레드를 사용할 수 있으며 이렇게 하면 긴 일련의 비동기 호출에 대한 콜백 체인을 단순화할 수 있습니다. 그러나 코드를 확인하는 복잡성이 증가하는 비용은 경쟁이 없습니다. 예를 들어 g_file_copy_async()의 진행률 콜백은 초기 호출 시 스레드 기본 기본 컨텍스트에서 호출된 것으로 문서화됩니다. 이전 예제를 수정하면 invoke_my_func() 함수를 다음으로 대체할 수 있습니다. 차단. 그러나 계산 결과가 UI에 표시되어야 할 수 있으므로 계산이 완료되면 일부 UI 업데이트 함수를 주 스레드에 호출해야 합니다.

GMainContext에는 `연결`되는 GSource 집합이 있으며, 각 GSource는 해당 이벤트가 수신될 때 호출되는 연결된 콜백 함수가 있는 예상 이벤트로 생각할 수 있습니다. 또는 파일 설명자(FD)의 집합과 동등하게 확인할 수 있습니다. 예를 들어 이벤트는 시간 시간 또는 소켓에서 수신되는 데이터일 수 있습니다. 이벤트 루프의 한 반복은 output_stream1 및 output_stream2가 코드의 다른 곳에서 온 것으로 추측됩니다. 그것은 완전히 독립적 인 예가 될 수 없습니다. 그들의 기원은 내가 보여주려는 주요 컨텍스트 개념에 영향을 미치지 않습니다.