2011-01-10 2 views
2

Windows API에서 직접 GUI를 만드는 것을 포기 했으므로 양식을 사용할 것입니다. 내 애플 리케이션을 multithread하고 클래스의 GUI를 포장하고 별도의 스레드에 넣어 싶습니다. 버튼 등을 클릭하면 주 스레드에서 읽을 구조체의 값이 변경됩니다. 내 문제는 응용 프로그램을 컴파일 할 때 링커에 오류가 발생한다는 것입니다./clr을 사용하여 컴파일 할 때 부스트 스레드 사용

 
1>Core.obj : error LNK2022: metadata operation failed (8013119F) : A TypeRef exists which should, but does not, have a corresponding TypeDef: (dummy): (0x0100001f). 

메인 코드는 다음과 같습니다.

클래스를 만들고 주 스레드에서 함수를 호출 할 때 제대로 작동하지만 부스트를 사용하면 문제가 발생합니다. 올바른 컴파일러 인 MSVC-10.0을 사용하여 부스트를 구축했으며 스레딩 라이브러리는 항상 과거에는 작동했지만 clr은 문제를 일으켰습니다. 해결 방법에 대한 권장 사항은 무엇입니까? 또는 .net 멀티 스레딩을 사용해야하는 경우 (실제로 C++에서 사용하는 방법에 대한 링크가 필요하다. 찾을 수있는 대부분의 것들은 C#이다). 감사합니다. .

+1

boost :: thread가 r 값 참조를 사용하기 때문에이 오류가 발생합니다. 관리되는 링커에서 지원되지 않습니다. 이런 식으로 열차 사고로 가고 있습니다. 사용자 인터페이스는 단지 볼트로 고정시킬 수있는 것이 아닙니다. 단일 스레드 아파트를 만들어야하며 UI는 근본적으로 스레드가 안전하지 않습니다. 당신을 곤경에서 벗어나게하는 방법을 모릅니다. –

+1

rvalues없이 부스트를 빌드 할 수 있습니까? – contrapsych

답변

2

boost::thread을 관리 응용 프로그램에서 사용할 때 두 가지 문제점이 있습니다. 첫 번째는 발생한 링커 오류입니다. 두 번째는 boost::thread 구현이 애플리케이션과 정적으로 링크되어있는 경우 애플리케이션 시작시 초기화 오류입니다.

두 가지 문제는 older bug report에 언급되어 있습니다. 이것이 이후 릴리스에서 변경되었는지는 알 수 없습니다. 1.43에도 같은 문제가 있습니다. 나는 사건이 폐쇄 된 것처럼 생각하지 않는다. wontfix.

관련 문제