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

因为,很明显,

无效委托初始化 - 函数不是一个管理类

所以,我开始使用Google的托管代码约托管线程中的一员,但没有发现任何澄清。有什么建议?我是完全错误的吗?

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