2013-05-19 6 views
0

저는 Linux에서 GTK + 2.0 GUI를 사용하여 C로 간단한 응용 프로그램을 개발하고 있습니다. 물론이 응용 프로그램은 USB 포트를 통해 연결되어있는 장치를 제어하도록 설계되었습니다. FTDI 드라이버는 USB 포트를 통해 RS232 비동기 프로토콜을 에뮬레이션합니다.glib 및 gtk +를 사용하여 USB를 통해 ftdi 장치 제어

단추를 클릭 할 때를 감지하는 데 사용되는 GTK의 신호와 같이 이벤트 기반 컨트롤을 만들고 싶었습니다. 이것에 대한 glib 라이브러리를 찾았습니다. 분명히 보이는 문서를 읽었습니다. g_io_add_watch()와 같은 함수를 사용하여 감지 할 이벤트를 추가해야한다는 것을 알고 있습니다.이 이벤트에서 "트리거 된"함수를 정의 할 수 있습니다. 예를 들어 "G_IO_IN"은 일부 출력이있을 때 트리거됩니다. 장치. 웹에서 유용한 예제를 찾을 수 없습니다.

다른 점은 GTK + 2.0 및 glib를 한 번에 사용하는 방법을 이해하지 못합니다. 둘 다 GTK + 2.0 및 glib에서 GMainLoop에 대한 이벤트 (gtk_main())를 감지하기 위해 자체 루프를 가지고 있기 때문입니다.

몇 가지 흥미로운 예제, 링크, 자습서 등을 공유하면 좋을 것입니다. 어쩌면이 문제를 해결하기 위해 웹에서 유용한 것을 찾을 수 없기 때문에 더 구체적인 어휘를 알아야 할 필요가있을 것입니다. 감사합니다.

+0

GTK +는 glib를 사용하므로 GUI 물건의 경우 glib API를 직접 사용할 필요가 거의 없습니다. 예전의 gtk_signal_connect()가 오랫동안 감가 상각 되었기 때문에 (예에서 버튼을 클릭 할 때와 같이) 그래픽 요소에 GTK + 시그널 핸들러를 연결하기위한'g_signal_connect()'함수 군이 예외입니다. 반면에'gtk_main()'은 메인 GUI 루프를 시작하기에 여전히 선호된다. –

+0

네, GUI 이벤트를 정의하기 위해'g_signal_connect()'를 사용하고 있습니다. ftdi 드라이버 신호의 감지를 통합하는 방법을 모르므로, G_OBJECT와 같은 div를 사용하여' g_signal_connect()'? – Marek

+0

아, 불행히도 ftdi 드라이버 신호 (경험이 충분하지 않음)에 대해 도움을 드릴 수는 없습니다. 그러나 GTK + 신호를 내보내려면'g_signal_emit _()'함수 군과 그 주위의 문서를 살펴 봐야합니다. 자신의 GTK + 신호를 생성, 방출 및 처리 할 수도 있습니다 (올바르게 호출 한 경우 'marshallers'를 통해). –

답변

0

GTK +는 GLib을 사용하며 주 루프도 예외는 아닙니다. 즉, GTK+ loopGMainLoop이므로 모든 GLib 함수를 함께 사용할 수 있습니다.

다음은 GTK + 코드에 대한 참조입니다 (prove this).

+0

나는 이해한다. 그래서 제발 말해주세요.'#include '이 (변환에 의해) glib을 참조 할 것인가? 그리고'g_io_add_watch (...) '로 이벤트를 정의하고 나중에 gtk_main() 루프를 시작하면 해당 이벤트가 발생할 때까지 기다릴 것입니까? – Marek

+0

'#include '은'#include '과'#include '를 가져올 것입니다. 이것은 문서화되지 않았기 때문에 개인적으로 프로젝트에 명시 적으로 포함시킵니다. 두 번째 질문의 경우 대답은 "예, g_io_add_watch()"를 사용할 수 있으며 "아니요, 주주기는 대기하지 않습니다"입니다. 'g_io_add_watch()'는 싸이클을 멈추지 않지만 콜백 호출을 고안합니다. – ntd

+0

대단히 감사합니다! 지금은 분명합니다. – Marek

관련 문제