Первое.
В частности, когда элемент управления входит в область действия while-l oop -body, создается thread
объект aThread
, и его конструктор порождает новый поток ОС. (обратите внимание, я предполагаю, что вы используете std::thread
, а не какой-либо другой класс потока).
Затем вы вызываете detach()
на объекте потока, поэтому поток ОС больше не связан с объектом aThread
, но он все еще выполняется.
Затем после задержки в одну секунду достигается конец области видимости, поэтому объект aThread
уничтожается, но, поскольку поток ОС был отсоединен от объекта aThread
, поток ОС остается продолжать работать самостоятельно.
Затем область видимости вводится снова для следующей итерации while-l oop, и весь процесс повторяется бесконечно.
В общем , лучше вызывать join()
в ваших потоках, а не detach()
, поскольку это позволит вашей программе выполнить упорядоченное завершение работы. Без join()
трудно или невозможно безопасно разорвать ресурсы всего процесса, так как вы не можете гарантировать, что все еще работающие потоки могут не использовать эти ресурсы во время разрыва. Следовательно, большинство хорошо написанных многопоточных программ будут вызывать join()
во всех текущих потоках, непосредственно перед концом main()
, если не раньше.