Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++11 Kill threads when main() returns?

I heard that "a modern operating system will clean up all threads created by the process on closing it" but when I return main(), I'm getting these errors:

1) This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.

2) terminate called without an active exception

My implementation looks like this (I'm writing now for example sorry for bad implementation):

void process(int id)
{
    while(true) { std::this_thread::sleep_for(std::chrono::milliseconds(1); } }
}

int main()
{
    std::thread thr1(process, 0);
    std::thread thr2(process, 1);
    //thr1.detach();
    //thr2.detach();
    return 0;
}

If I uncomment detach();s, there is no problem but my processing threads will be socket readers/writers and they will run infinitely (until main returns). So how to deal with it? What's wrong?

EDIT: Namely, I can't detach() every thread one-by-one because they will not be terminated normally (until the end). Oh and again, if I close my program from the DDOS window's X button, (my simple solution not works in this case) my detach(); functions being passed because program force-terminated and here is the error again :)

like image 564
PilawyerDev Avatar asked Jul 04 '14 10:07

PilawyerDev


1 Answers

What happens in an application is not related to what the OS may do.

If a std::thread is destroyed, still having a joinable thread, the application calls std::terminate and that's what is showing up: http://en.cppreference.com/w/cpp/thread/thread/~thread`

With the c++11 threads, either you detach if you do not care on their completion time, or you care and need to join before the thread object is destroyed.

like image 117
galop1n Avatar answered Oct 21 '22 04:10

galop1n