쓰레드 동작시 프로그램이 죽어버리는 현상 과 listview 아이템 정렬

indeok84의 이미지

korone.net에도 며칠 전 이 글을 올렸었는데 답글이 없어 이곳에 다시 올려봅니다

질문이 두개가 있는데요,

1. 쓰레드를 작동시킬때 자꾸 세그멘테이션 폴트가 발생되네요;;

QT3.3 디자이너로 GUI 폼 만들고

버튼 누르면 쓰레드 돌면서 listview에 아이템 추가 하도록 했습니다.

그런데 버튼 누르고 프로그램 동작 시키면 아래와 같은 세그먼테이션폴트로 프로그램이 죽거나 잘 실행됩니다.

세그멘테이션 폴트 -> QTextCursor::QTextCursor()

이유를 도저히 모르겠네요 ㅠㅠ

2. 쓰레드로 돌리면서 계속 아이템을 listView에 추가해서 그런지 sort()를 disable 하니까

세그멘테이션 폴트는 없어졌는데 이제 정렬이 안되네요.

맨 위에 아이템이 추가되기때문에 계속 스크롤 바가 아래로 내려가는데

이미 존재하는 아이템 의 인덱스를 구해서 그 다음 인덱스에 추가하는 이런 방법 없나요??

정렬을 못하니,,, 세그멘테이션폴트를 해결해도 문제가 발생하네요;;

질문 두개 혹시 해결 법 아시는분 알려주시면 감사하겠습니다.

맨날 질문만하고 답변을 못달아 죄송하네요.

평일의 마지막날인데 수고하세요!!

chadr의 이미지

스레드를 이용할려면 동기화라는 것을 사용해야합니다.
간단히 비유해보자면 이렇습니다. 여러사람들이 메모지 하나에 자신이 먹고 싶은 것을
적고 있습니다. 이때 일반적으로 우리는 한사람이 다 쓰고나면 자신이 쓰도록 합니다.
그런데 욕심을 부려서 두명이 동시에 종이에 쓰고자한다면 나중에 그걸 읽는 사람은
엉망이 된 메모지를 보게 됩니다. 이때 한명씩 쓰는걸 동기화라고 합니다.

질문하신 사항에서 데이터를 입력하고 있는데 정렬을 했습니다. 정렬은 데이터의 이동이
수반되는 행위입니다. 즉 쓰기가 행해집니다. 그 상황에서 동기화를 하지 않으면 한 스레드에서는
삽입이 다 안 끝났는데 다른 스레드에서 삽입후 정렬을 해버리면 엉망진창이 되버립니다.

좀더 자세한 사항은 여러 서적을 참고 하시거나(운영체제) 구글에서 스레드 동기화 라고 검색해보시면
해결 방법이 많이 나옵니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

댓글 달기

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