2017-02-22 9 views
0

시리얼 포트 이벤트로 작업하기 위해 GSource의 서브 클래스를 작성하려고합니다. 필자가 찾은 방법은 파일 디스크립터를 사용하는 POSIX 터미널 인터페이스를 사용하는 것이다. 어떤 이유로 GLib의 Main Event Loop은이 변수를 다루는 특별한 방법을 가지고 있습니다.사용자 정의 gsource를 만들 때 직렬 핀을 사용하는 방법은 무엇입니까?

official documentation says에는 디스패치 준비에 사용되는 두 개의 GSource 추상 함수가 있으며 하나는 fds 풀과 하나 이후에 실행됩니다. 이것은 아마도 GLib가 파일 설명자를 처리하는 대신에 내 자신의 prepare 함수에서 이것을 구현하는 것이 중요하다는 것을 보여줍니다. 그러나 there is no condition은 "pin state changed"와 같이 직렬 포트 핀과 함께 작동합니다. 이것에 관해서는 몇 가지 질문이 있습니다.

  1. GLib 팀이 라이브러리에서 파일 설명자를 처리하도록 선택하는 이유는 무엇입니까?

  2. 난 그냥 무시하고 내 자신의 준비 기능을 구현하면 몇 가지 문제가 발생할 수 있습니까? 는 낮은 수준의 이벤트 폴링 poll()에 전달 할 수 있어야로

답변

0
  1. GSource 요구는 파일 기술자를 처리합니다.
  2. 질문이 명확하지 않습니다. 뭘 무시하니? 구현 무엇?

g_unix_fd_source_new()으로 생성 된 GUnixFDSource을 사용하여 터미널 FD에서 입력을 볼 수 있어야한다고 생각합니다. 콜백 (g_source_set_callback())에서는 일반 터미널 I/O 기능을 사용하여 FD에서 읽을 수 있어야합니다. GSource은 FD를 글로벌 이벤트 루프 (GMainContext)에 통합하는 데 효과적입니다.