завершение основного потока при наличии работающих второстеп
От: ilvi Россия  
Дата: 11.09.09 02:23
Оценка:
Добрый день.

Возник спор со знакомым. На такую тему. Есть приложение, которое в основном потоке запускает второй поток. По моему мнению, что если мы в основном потоке не будем ждать завершения второго потока, то по завершению основного потока приложение завершится и автоматически прикончит второй поток. Знакомый же утверждает, что после завершения основного потока, приложение будет выполнятся пока не завершатся все потоки запущеные из основного потока.

Написал для проверки консольное приложение:


#include "stdafx.h"
#include <atlbase.h>
#include <iostream>
using namespace std;

unsigned __stdcall second_thread(void*)
{
    int i = 0;
    while(i < 100)
    {
        cout << "still alive   " << endl;
        ++i;
        Sleep(100);
    }
    
    _endthreadex( 0 );
    return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "create second thread" << endl; 
    unsigned threadID;
    HANDLE hThread = (HANDLE)_beginthreadex( NULL, 0, &second_thread, NULL, 0, &threadID );
    //WaitForSingleObject( hThread, INFINITE ); //Если раскоментировать эту строчку, то второй поток естественно отрабатывает полностью
    CloseHandle(hThread);
    cout << "exit   " << endl; 
    return 0;
}


под MSVC 2008 в релизе выдает, то что подтверждает мое мнение:

create second thread
exit still alive

Для продолжения нажмите любую клавишу . . .


Возможны вариации с относительным положением "exit" и "still alive".
В итоге возник вопрос: стандартом как-то такое поведение затрагивается или это сугубо компиляторо/платформо зависимо, и например, в реализации под GCC может быть другой итог работы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.