쓰레드 동작시 프로그램이 죽어버리는 현상 과 listview 아이템 정렬
글쓴이: indeok84 / 작성시간: 금, 2009/07/03 - 10:01오전
korone.net에도 며칠 전 이 글을 올렸었는데 답글이 없어 이곳에 다시 올려봅니다
질문이 두개가 있는데요,
1. 쓰레드를 작동시킬때 자꾸 세그멘테이션 폴트가 발생되네요;;
QT3.3 디자이너로 GUI 폼 만들고
버튼 누르면 쓰레드 돌면서 listview에 아이템 추가 하도록 했습니다.
그런데 버튼 누르고 프로그램 동작 시키면 아래와 같은 세그먼테이션폴트로 프로그램이 죽거나 잘 실행됩니다.
세그멘테이션 폴트 -> QTextCursor::QTextCursor()
이유를 도저히 모르겠네요 ㅠㅠ
2. 쓰레드로 돌리면서 계속 아이템을 listView에 추가해서 그런지 sort()를 disable 하니까
세그멘테이션 폴트는 없어졌는데 이제 정렬이 안되네요.
맨 위에 아이템이 추가되기때문에 계속 스크롤 바가 아래로 내려가는데
이미 존재하는 아이템 의 인덱스를 구해서 그 다음 인덱스에 추가하는 이런 방법 없나요??
정렬을 못하니,,, 세그멘테이션폴트를 해결해도 문제가 발생하네요;;
질문 두개 혹시 해결 법 아시는분 알려주시면 감사하겠습니다.
맨날 질문만하고 답변을 못달아 죄송하네요.
평일의 마지막날인데 수고하세요!!
Forums:
스레드를 이용할려면
스레드를 이용할려면 동기화라는 것을 사용해야합니다.
간단히 비유해보자면 이렇습니다. 여러사람들이 메모지 하나에 자신이 먹고 싶은 것을
적고 있습니다. 이때 일반적으로 우리는 한사람이 다 쓰고나면 자신이 쓰도록 합니다.
그런데 욕심을 부려서 두명이 동시에 종이에 쓰고자한다면 나중에 그걸 읽는 사람은
엉망이 된 메모지를 보게 됩니다. 이때 한명씩 쓰는걸 동기화라고 합니다.
질문하신 사항에서 데이터를 입력하고 있는데 정렬을 했습니다. 정렬은 데이터의 이동이
수반되는 행위입니다. 즉 쓰기가 행해집니다. 그 상황에서 동기화를 하지 않으면 한 스레드에서는
삽입이 다 안 끝났는데 다른 스레드에서 삽입후 정렬을 해버리면 엉망진창이 되버립니다.
좀더 자세한 사항은 여러 서적을 참고 하시거나(운영체제) 구글에서 스레드 동기화 라고 검색해보시면
해결 방법이 많이 나옵니다.
-------------------------------------------------------------------------------
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.
댓글 달기