[완료] glade로 만든 tree에 for문과 sleep을 이용해 주기적으로 데이타를 넣구 있습니다!

고양이를부탁해의 이미지

안녕하세요 즐거운 밤입니다 :)

제가 지금 glade로 UI를 디자인하면서 만든 tree 위젯을 리스트로 사용하고 있습니다.

프로그램이 실행이 되면 트리의 각 column들을 셋업하고 패킹시킵니다
그 다음 어떤 버튼을 누르면 리스트에 주기적으로(1초) 한줄이 출력이 되게 하는 소스를 코딩했습니다.

for문에서 보이시겠지만 1초간격으로 10번 출력하려는 의도로 작성했는데 결과는
10초 후에 10줄이 출력이 됩니다. on_button_start_clicked에서 insert_row함수를 호출하는
부분에 for문과 sleep을 사용해봤는데도 마찬가지 입니다.

이런 경험을 해보신 분의 해결책이나 조언 부탁드리겠습니다!!

소스는 다음과 같습니다.

void
on_button_start_clicked                (GtkToolButton   *toolbutton,
                                        gpointer         user_data)
{
		insert_row();
}
void insert_row(void)
{
	int cnt=0;
 
	for(cnt=0; cnt<10;cnt++)
	{ 
		// 한 줄 추가
		gtk_tree_store_append(store, &iter, NULL);
		gtk_tree_store_set(store, &iter,
					NO_COLUMN,"1",
					TIME_COLUMN,"1",
					SOURCEIP_COLUMN,"0.0.0.0",
					DESTIP_COLUMN,"1.1.1.1",
					PROTOCOL_COLUMN,"TCP",
					INFO_COLUMN," TCP hello",-1);
 
		sleep(1);
	}
}
ganadist의 이미지

sleep대신에 g_timeout_add()를 사용하시기 바랍니다.

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

고양이를부탁해의 이미지

ganadist님 덕분에 하나 배우고 갑니다!! ^^

------------
힘들면 즐겁다.


------------
힘들면 즐겁다.

bejoy4him의 이미지

ganadist 님이 말씀하신대로 타이머를 사용하도록 하세요..

위의 내용에 조금더 부연설명을 드리자면,
코드를 살펴보니, callbacks.c 파일을 수정해서 작성하신듯 한데.
그곳에서 호출하는 함수들에서 sleep을 호출하면 sleep하는 동안 프로세스가 멈춰버립니다.

click -> sleep호출 : click함수가 리턴되지 않기때문에
화면 갱신과 같은 다른 이벤트를 처리하지 못함(실제 데이터는 입력되나 이벤트 처리가 되지 않아서 화면에 표시되지 않음
10초가 경과한 이후 click 함수가 리턴되면서 기존에 처리되지 못한 이벤트들이 한꺼번에 처리됨-> 한꺼번에 10줄이 표시됨

GUI 프로그램을 작성하실때는 기본적으로 이벤트 드리븐 방식으로 코딩하는게 좋습니다.
굳이 sleep을 사용하고 싶다면, 따로 쓰레드를 생성하여 그곳에서 sleep 하도록 하세요.

이번과 같은 경우는 다음과 같이 하시는게 좋습니다.

1초마다 TimeOut이벤트 발생 -> 트리에 데이터 추가
TimeOut 10회 발생이후 타이머 해제

고양이를부탁해의 이미지

감사합니다 bejoy4him님!!

자세한 설명도 감사합니다!!

이벤트 드리븐 방식 명심하겠습니다 ^^

------------
힘들면 즐겁다.


------------
힘들면 즐겁다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.