MFC 프로그램에서 스레드를 생성할때 pParam으로 CWnd 객체를 넘겨 줬습니다.
CWnd를 생성한 스레드가 아닌 다른 스레드에서 MFC 함수를 쓰면 오류가 발생하는건 알고 있는데요
다른 스레드에서 CWnd의 멤버 변수에 접근할때도 오류가 나나요? 제가 직접 테스트 해봤을때는 멤버 변수 접근시에는 오류가 나지 않았는데요
잠재적으로 오류가 발생할 여지가 있는 코드인가요? 답변 부탁드리겠습니다.
'접근'의 구체적인 내용에 따라 달라집니다. 일반적으로 단순히 메모리상의 값을 읽기만 하는 것은 문제가되지 않습니다. 그 외의 모든 경우에대해서는 문제가 발생할 수 있습니다.
const 멤버함수라고 해도 함수 내부에서는 thread-safe 하지 않은 작업을 하고 있을 가능성이 있기 때문에, 레퍼런스등을 통해서 thread-safety를 확인해야합니다.
먼저 답변 감사 드립니다 ~ 정확하게는 CWnd 클래스를 상속한 객체를 다른 스레드에 넘겨 줬고요. 다른 스레드에서 접근하는 멤버 변수는 제가 추가한 멤버 변수들 입니다. 다른 스레드에서는 해당 멤버를 읽기/쓰기 둘 다 합니다. 이런 식의 접근은 허용 가능한 것이겠죠? 감사합니다.
다른 스레드에서 쓰기를 하는 변수에 메인스레드(GUI스레드)나 기타 다른 스레드에서 쓰기를 하지 않는다면 괜찮을 것입니다.
고맙습니다~~ ^^
텍스트 포맷에 대한 자세한 정보
<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]
'접근'의 구체적인 내용에 따라
'접근'의 구체적인 내용에 따라 달라집니다.
일반적으로 단순히 메모리상의 값을 읽기만 하는 것은 문제가되지 않습니다.
그 외의 모든 경우에대해서는 문제가 발생할 수 있습니다.
const 멤버함수라고 해도 함수 내부에서는 thread-safe 하지 않은 작업을 하고 있을 가능성이 있기 때문에,
레퍼런스등을 통해서 thread-safety를 확인해야합니다.
답변 감사 드립니다.
먼저 답변 감사 드립니다 ~
정확하게는 CWnd 클래스를 상속한 객체를 다른 스레드에 넘겨 줬고요.
다른 스레드에서 접근하는 멤버 변수는 제가 추가한 멤버 변수들 입니다.
다른 스레드에서는 해당 멤버를 읽기/쓰기 둘 다 합니다.
이런 식의 접근은 허용 가능한 것이겠죠?
감사합니다.
다른 스레드에서 쓰기를 하는 변수에
다른 스레드에서 쓰기를 하는 변수에 메인스레드(GUI스레드)나 기타 다른 스레드에서 쓰기를 하지 않는다면 괜찮을 것입니다.
감사합니다~
고맙습니다~~ ^^
댓글 달기