x11 프로그래밍중 thread내에서 UI처리문제입니다.

dndmania@naver.com의 이미지

안녕하세요

X11 프로그래밍중 발생한 문제에 대해서 여쭙고자 합니다.

현재 X11/UI 프로그램내에서 쓰레드로 서버를 돌리고 메세지가 오면
UI를 조금 변경하는 작업을 하고 있는데요

쓰레드로 돌린 서버에서 메세지를 받고 메인 UI를 조금 변경하려고 하면
바로 아래와 같은 ERROR 나서 죽네요....
most likely this is a multithreaded client and xinitthreads has not been called.

안드로이드에서도 이와 유사하게 메인스레드가 아닌 sub 스레드에서 UI처리를 하면
error 가 발생해 HANDLER를 통해 메인스레드로 메세지를 전달하는 방향으로 갔었는데

X11 프로그래밍에서는 어떤 방식이 있을까요?

아시는분 답변 부탁드립니다.

감사합니다.

dndmania@naver.com의 이미지

[xcb] Unknown request in queue while dequeuing
[xcb] Most likely this is a multi-threaded client and XInitThreads has not
been called
[xcb] Aborting, sorry about that.
정확한 로그는 위와 같습니다. ㅜㅜ

익명 사용자의 이미지

XInitThreads 이 함수를 호출하지 않았대요.

This function must be the first Xlib function a multi-threaded program calls, and it must complete before any other Xlib call is made.

매뉴얼에는, 이 함수가 멀티 쓰레드 프로그램에서 가장 첫번째로 호출되어야하고, 다른 xlib 함수가 호출되기 전에 이 함수가 완료되어야한다네요.

익명 사용자의 이미지

한 스레드에서 호출한 Xlib 함수가 완결되기 전에, 다른 쓰레드에서 Xlib 함수가 호출되었기 때문에 생기는 현상으로 알고 있습니다. 개별적인 Xlib 함수는 다수의 X request-reply 의 조합으로 구성되는데, 기본적으로 이 함수가 원자적이지 않습니다. 다른 스레드가 중간에 끼어들 수 있다는 거죠. 최초에 XInitThreads를 호출하게 되면 Xlib 함수 내부에서 lock을 써서 함수가 완결되기 전에 다른 스레드로 문맥이 전환되는 것을 막습니다. 하지만 제가 알기론 Xlib에 버그가 있어서, XinitThreads를 쓰면 XIM과 출돌하거나 하는 문제가 있는걸로 알고 있습니다(몇년전 이야기입니다. 현재는 어떤지 모르겠네요).

다르게 말한다면, Xlib 함수를 쓰는 것을 X라는 공유 자원에 접근하는 거라고 생각하시면 됩니다. 당연히 일반적으로 멀티 쓰레드 프로그램에서 제시하는 해결법을 동일하게 적용할 수 있습니다. lock을 쓰시던지, lock-free하게 설계를 바꾸시던지 등...

imyaman의 이미지

익명이시네요
누구신지 궁금합니다 아이디 좀...
저는 두번째 댓글 작성자입니다

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.