d языковая нить

Как правильно передать дескриптор, используя core.thread в D? Я пытался сделать это так, но дескриптор изменится, и я не знаю, почему:

void WorkerThread(handle hand) 
{
    …
}

…

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

d dmd
person Dev Wolf    schedule 08.03.2012    source источник


Ответы (1)


Конструктор Thread может принимать делегата, который может иметь контекст. В показанном коде контекст является закрывающей функцией. Если это проблема по какой-то причине, вы должны сделать что-то вроде этого:

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 );
}
person BCS    schedule 08.03.2012