스레드 내에서 ListView_InsertItem 을 사용하면 안 되나요?
글쓴이: acuna / 작성시간: 일, 2005/02/27 - 12:47오전
안녕하세요.
새로 가입한 acuna라고 합니다.
잘 부탁드립니다... ^_^;
다름이 아니오라
제가 간단한 리스트뷰에 파일 리스트를 채워넣는 프로그램을
만들고 있는데 파일 리스트를 리스트뷰에 넣는 것이 시간이 오래 걸려서 이 부분을 스레드로 분리시켰습니다.
CreateEvent와 WaitForSingleObject(INFINITE)로 파일 리스트 채워넣는 것을 한 번에 하나의 스레드만 접근이 가능하도록 허접하게나마 동기화를 했다고 생각했습니다.
그런데 이게 파일 리스트를 채우는 중 다른 스레드가 다시 들어와서 WaitForSingleObject에서 대기를 하는데 이게 무한 대기를 하더군요 -_-;
원인을 계속 찾아봤는데 제 짧은 지식으로 살펴보니 스레드 함수 내의 ListView_InsertItem같은 함수를 주석처리하니 문제없이 동작하더군요...
ListView_InsertItem을 사용하면 화면에 ListView 아이템도 나타나게 되고... 무슨 GDI랑 스레드 동기화랑 관계가 있나요? -_-;
지식이 짧으니 짐작하기도 힘들군요...
조금이나마 도움을 주신다면 정말 감사하겠습니다.
즐거운 주말 되세요.
Forums:
윈도우즈 쪽 질문은 devpia 같은 곳이 답변이 더 빨리올라올겁니다.
윈도우즈 쪽 질문은 devpia 같은 곳이 답변이 더 빨리올라올겁니다.
암튼,
리스트뷰에 내용을 채워넣는 쓰레드의 handle을
보관하고 계시다가 그 handle에 대해서만
WaitForSingleObject(...)을 사용하는거는 어떨지 싶네요.
MFC말고 Win32 API로 코딩하고 계신듯한데요.
소스를 봐야할듯~
MFC 컨트롤의 경우, 스레드에서 바로 컨트롤의 UI관련된 기능을 호출하
MFC 컨트롤의 경우, 스레드에서 바로 컨트롤의 UI관련된 기능을 호출하면 데드락에 빠질 위험이 큽니다. 그래서, POSTMESSAGE로 주 스레드에 메세지를 보내고 거기서 UI 업데이트를 해야합니다. 고운 하루되세요.
=========================
CharSyam ^^ --- 고운 하루
=========================
감사합니다.
kihongss님, charsyam님
답변 정말 감사드립니다.
일단 PostMessage로 주 스레드에 메시지를 보내봐야겠습니다.
감사합니다. ^_^
댓글 달기