2012-03-08 4 views
1

Comment passer correctement une poignée en utilisant core.thread dans D? J'ai essayé de le faire comme ça, mais la poignée va changer et je ne sais pas pourquoi:d thread de langue

void WorkerThread(handle hand) 
{ 
    … 
} 

… 

auto worker = new Thread({ WorkerThread(m_handle); }); 

Répondre

1

Le constructeur Thread peut prendre un délégué qui peut avoir son contexte. Dans le code affiché, le contexte est la fonction englobante. Si c'est un problème pour une raison quelconque, vous devriez être capable de faire quelque chose comme ceci:

void StartThread(handle hand) { 
    struct Con { 
    handle m_handle; 
    void Go() { WorkerThread(m_handle); } 
    } 

    Con con = new Con; 
    con.m_handle = hand; 
    auto worker = new Thread(&con.Go); 
} 
Questions connexes