일부 컨텍스트 : 기본 C++을 알고 있습니다. 처음으로 Visual Studio에서 C++/CLI를 사용하여 GUI 응용 프로그램을 만들려고합니다. 그러나, 나는 후자에 대해 많은 답변을 온라인으로 찾을 수 없습니다.C++/CLI의 스레드에 콜백 함수 전달
클래스에 도착했습니다 : MyForm
, Windows Form에 해당하는 기본 클래스 및 OtherClass
입니다. MyForm
은 OtherClass
유형의 개체를 구성원으로 갖고 있습니다. MyForm
의 기능은, 예 myButton_Click
,이 객체를 초기화하고 스레드에서 그 기능 중 하나를 호출
using namespace System::Threading;
ref class MyForm;
ref class OtherClass;
public ref class MyForm : public System::Windows::Forms::Form {
public:
//...
private:
OtherClass^ o;
System::Void myButton_Click(System::Object^ sender, System::EventArgs^ e) {
//When the button is clicked, start a thread with o->foo
o = gcnew OtherClass;
Thread^ testThread = gcnew Thread(gcnew ThreadStart(o, &OtherClass::foo));
newThread->Start();
}
};
ref class OtherClass {
public:
void foo() {
//Do some work;
}
};
이것은 지금까지 작동하는 것 같군. 내가 원하는 건 일이 foo
의 값으로 UI를 업데이트하기 위해 어떤 종류의 콜백 함수를 MyClass
에서 o->foo
으로 전달하는 것입니다.
이 작업을 수행하는 가장 좋은 방법은 무엇입니까? CLI 때문에 단순히 함수 포인터를 전달하는 기능이 작동하지 않습니다.
대부분의 경우 [위임] (https://msdn.microsoft.com/en-us/library/c320cx3h.aspx)? – orhtej2
감사! 그 방법이 될 것 같습니다,하지만 여러 파일에 걸쳐 그들을 사용하는 방법을 찾을 수 없습니다. 두 헤더 파일에서 델리게이트를 선언하려고하면 재정의 오류 (duh)가 발생합니다. 파일 중 하나에서만 델리게이트를 선언하면 다른 파일에서 알 수없는 식별자 오류가 발생합니다. 그리고 그 파일에서 델리게이트를 전달 선언하는 방법이없는 것 같습니다. – jmb
[이 답변] (https://stackoverflow.com/a/1147523/7034621) stdafx.h에서 대리자 선언을 제안합니다. – orhtej2