제가 gtk 로 프로그램을 만드는데요, 이 프로그램이 소켓으로 서버에 접속하여 메시지를 송수신합니다. 처음에는 루프로 구현하려고 했는데 gtk 프로그램에는 main 함수에 gtk_main (); 함수가 있어서 루프를 집어넣을 수가 없네요. 메시지를 보내는 것은 그냥 하면 될 것 같은데 받는 것은 어떻게 해야 할까요???
g_thread ... ....
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~ 나 한줄기 바람처럼..
thread를 써도 되고요 아니면 gtk_timeout_add()함수를 간단히 사용하셔도 될 듯 합니다. 물론 간단한 받는 작업이라면 말이죠.
진리를 나의 수준으로 끌어내리지 마라. 나를 진리의 수준으로 끌어올려라. - 배꼽 중에서
gdk_input_add(...) 도 있습니다...
자세한 내용은 gtk+ reference 라는 문서 뒷부분에 있습니다...
문서 이름이 이게 맞나 확실히 기억이...-_-;
이제 졸업이다...사랑하는 SKKULUG 후배들아 안녕~
whille (gtk_events_pending() ) gtk_main_iteration()
이놈으로 해도 될 것 같군요. thread 쓰기 싫을때 자주 사용합니다. 특히 프로그레스 바... :x
g_io_channel을 이용하는 게 가장 간단합니다. thread를 사용하게 되면 꽤 복잡한 부분이 있습니다.
fd를 가지고 g_io_channel_unix_new()를 불러서 GIOChannel을 만든후 g_io_add_watch()를 이용해서 이벤트 루프에 등록하면 원하는 상황일때(readble/writeable) 일때 해당 콜백 함수를 호출해줍니다.
Gtk를 이용할때 가급적 꽁수를 피하는게 좋습니다.
참고:http://developer.gnome.org/doc/API/2.0/glib/glib-IO-Channels.html
g_io_channel을 이용하는 게 가장 간단합니다. thread를 사용하게 되면 꽤 복잡한 부분이 있습니다. fd를 가지고 g_io_channel_unix_new()를 불러서 GIOChannel을 만든후 g_io_add_watch()를 이용해서 이벤트 루프에 등록하면 원하는 상황일때(readble/writeable) 일때 해당 콜백 함수를 호출해줍니다. Gtk를 이용할때 가급적 꽁수를 피하는게 좋습니다.
알려주신대로 해서 잘되었는데요... 접속을 끊었다가 다시 접속하면 클라이언트가 다운됩니다. 제생각에는 이벤트루프에 등록했다가 소켓을 닫으면 등록해제를 해야 할것 같은데요, 그런 함수는 없는 것 같더군요.
참고로 접속을 끊을 때는 생성한 GIOChannel의 레퍼런스를 감소시키고 g_io_channel_shutdown을 호출하여 닫은뒤 소켓을 닫는 방법으로 했습니다. (GIOChannel 닫는 것은 생략하고 소켓만 닫아도 똑같더군요...)
뭔가 방법이 없을까요???(현재는 접속을 끊으면 클라이언트를 다시 실행해야 접속할 수 있도록 해놓았습니다.)
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
g_thread .......
g_thread ...
....
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
thread를 써도 되고요 아니면 gtk_timeout_add()함수를
thread를 써도 되고요 아니면 gtk_timeout_add()함수를 간단히 사용하셔도 될 듯 합니다. 물론 간단한 받는 작업이라면 말이죠.
진리를 나의 수준으로 끌어내리지 마라.
나를 진리의 수준으로 끌어올려라. - 배꼽 중에서
gdk_input_add(...) 도 있습니다...자세한 내용은
gdk_input_add(...) 도 있습니다...
자세한 내용은 gtk+ reference 라는 문서 뒷부분에 있습니다...
문서 이름이 이게 맞나 확실히 기억이...-_-;
이제 졸업이다...사랑하는 SKKULUG 후배들아 안녕~
...
이놈으로 해도 될 것 같군요. thread 쓰기 싫을때 자주 사용합니다. 특히 프로그레스 바... :x
g_io_channel을 이용하는 게 가장 간단합니다.thread를
g_io_channel을 이용하는 게 가장 간단합니다.
thread를 사용하게 되면 꽤 복잡한 부분이 있습니다.
fd를 가지고 g_io_channel_unix_new()를 불러서 GIOChannel을 만든후
g_io_add_watch()를 이용해서 이벤트 루프에 등록하면 원하는 상황일때(readble/writeable) 일때
해당 콜백 함수를 호출해줍니다.
Gtk를 이용할때 가급적 꽁수를 피하는게 좋습니다.
참고:
http://developer.gnome.org/doc/API/2.0/glib/glib-IO-Channels.html
[quote]g_io_channel을 이용하는 게 가장 간단합니다.
알려주신대로 해서 잘되었는데요... 접속을 끊었다가 다시 접속하면
클라이언트가 다운됩니다. 제생각에는 이벤트루프에 등록했다가 소켓을
닫으면 등록해제를 해야 할것 같은데요, 그런 함수는 없는 것 같더군요.
참고로 접속을 끊을 때는 생성한 GIOChannel의 레퍼런스를 감소시키고
g_io_channel_shutdown을 호출하여 닫은뒤 소켓을 닫는 방법으로 했습니다. (GIOChannel 닫는 것은 생략하고 소켓만 닫아도 똑같더군요...)
뭔가 방법이 없을까요???(현재는 접속을 끊으면 클라이언트를 다시 실행해야
접속할 수 있도록 해놓았습니다.)
댓글 달기