2016-11-17 20 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)); 
} 

Потому что, очевидно,

недействителен делегат инициализатор - функция не является членом класса управляемых

Так что я начал прибегая к помощи о Managed Темы на неуправляемого кода но ничего не выяснил. Любой совет? Неужели я ошибаюсь?

+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));