Boost Thread висит на _endthreadex - PullRequest
       21

Boost Thread висит на _endthreadex

2 голосов
/ 09 апреля 2010

Я думаю, что делаю простую ошибку, но так как я заметил, что здесь много экспертов по повышению, я подумал, что буду просить помощи.

Я пытаюсь использовать форсированные потоки (1_40) на Windows XP. Основная программа загружает dll, запускает поток следующим образом (обратите внимание, что это не класс, статический означает не статический класс, а приватный для файла).

static boost::thread network_thread;
static bool quit = false;
HANDLE quitEvent;

//some code omitted for clarity, ask if you think it would help
void network_start()
{
  HANDLE *waitHandles = (HANDLE*)malloc(3 * sizeof(HANDLE));
  waitHandles[0] = quitEvent;
  waitHandles[1] = recvEvent;
  waitHandles[2] = pendingEvent;
  do {
      //read network stuff, or quit event
      dwEvents =WaitForMultipleObjects(3, waitHandles, FALSE, timeout);
   } while (!quit)
}

DllClass::InitInstance() 
{
}

DllClass::ExportedFunction()
{
   network_thread = boost::thread(boost::bind<void>(network_start));
}


DllClass::ExitInstance()
{
  //signal quit (which works)
   quit = true;
   SetEvent(QuitEvent);
   //the following code is slightly verbose because I'm trying to figure out what's wrong
    try {
       if (network_thread.joinable() ) {
           network_thread.join();
         } else {
            TRACE("Too late!");
        }
   } catch (boost::thread_interrupted&) {
        TRACE("NET INTERRUPTED");
    }
}

Проблема в том, что основной поток висит на соединении, а сетевой поток висит в конце _endthreadex. Что я недопонимаю?

1 Ответ

2 голосов
/ 09 апреля 2010

Вы не должны создавать / завершать потоки в InitInstance / ExitInstance,

см. http://support.microsoft.com/default.aspx?scid=kb;EN-US;142243 для получения дополнительной информации. Также см. http://msdn.microsoft.com/en-us/library/ms682583%28VS.85%29.aspx о DllMain в целом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...