2016-11-17 2 views
0

관리되는 스레드에서 관리되지 않는 클래스의 메서드를 실행하고 싶습니다. CLR에 초심자가되어 혼란스러워집니다. 기능 관리되지 않는 클래스 메서드 : 비표준 구문; '&'를 사용하여 멤버에 대한 포인터를 생성하십시오.

그래서 내가 관리되지 않는 코드에 대한 관리 스레드를 인터넷 검색을 시작하여 관리 클래스의 멤버가 아니라 -

#include <boost/asio/io_service.hpp> 
using namespace System::Threading; 

public ref class ManagedClass; 

int main() 
{ 
    ManagedClass^ managedObject = gcnew ManagedClass(); 

    Thread^ threadOk = gcnew Thread(
         gcnew ThreadStart(
          managedObject, 
          &ManagedClass::Run)); 


    boost::asio::io_service unmanagedObject; 

    Thread^ threadWrong = gcnew Thread(
          gcnew ThreadStart(
           unmanagedObject, 
           &boost::asio::io_service::run)); 
} 

잘못된 위임 이니셜이 분명히 있기 때문에 아무것도 명확하게 밝혀지지 않았다. 어떤 충고? 나는 완전히 잘못된 길을 가고 있는가?

+0

당신이 다음 관리되지 않는 함수를 호출하는 관리 기능을 호출 할 수있는 모든 이유가 충분했다, 말했듯이? – UKMonkey

답변

0

는 UKMonkey 조금 보일러가 ...

public ref class CMyStartService 
{ 
    boost::asio::io_service * _pIoService; 

public: 
    CMyStartService(boost::asio::io_service * pIoService) : 
     _pIoService(pIoService) 
    { 
    } 

    void run() 
    { 
     _pIoService->run(); 
    } 
}; 

// in main 

CMyStartService^ cMyStartService = gcnew CMyStartService(&ioService); 
Thread^ thread_io_service = gcnew Thread( 
           gcnew ThreadStart(
           cMyStartService, &CMyStartService::run)); 
관련 문제