Комментарии 15
Ваша программа стартует используя MS CRT void main().
В этом случае MS настоятельно рекомендует использовать функцию _beginthread, так как она проводит дополнительную инициализацию создаваемого потока для корректной работы CRT функций.
Ох уж этот AI контент.
Какое преимущество у WinApi перед стандартными функциями Си++?
Его можно использовать из чистого С )
Да, действительно. Только не особо переносимо.
Я сам начинал с винапи, включая многопоточку (тогда MSDN еще на компакт дисках поставлялся, интернет был дорогой и медленный). Но когда минимально освоил ООП - забыл как страшный сон. Хотя, как ни странно, где-то раз в 4 года приходится вспоминать :)
В C тоже уже есть потоки
Это уже другие стандартные функции )
И насколько вижу, там, как и в плюсах, нет аналога CREATE_SUSPENDED - только реализовывать вручную с враппером и синхронизацией.
А какой практический пример у этого флага? Если процесс ещё понятно (вдруг, что-то пропатчить налету надо, до первой команды), то с потоком - не понятно.
Если нужно проинициализировать какие то структуры, когда идентификатор потока уже известен, а код ещё не побежал. Скажем, в живущих в адресном пространстве чужого процесса профилировщиках бывает нужно (перехватываем создание потоков, сначала создаём в suspended, делаем свою инициализацию и отпускаем).
Таким не занимался, но все равно мне кажется, что раз уж перехватываем создание потока, то можно и проинициализировать всё нужное самим.
Я бы делал так, берём тот же detours, заменяем CreateThread на свой, где вначале делается инициализация ну и ждем по какому нибудь мьютексу (который в винапи CreateEvent) сигнала к запуску оригинальной функции потока.
Впрочем ок, пусть будет такой флаг. Для таких тонких вещей платформозависимый код это, как правило, необходимость.
Уже на этапе определений путается многопоточность с параллельностью.
Да, я действительно признаю то, что нарочно добавил хаб «Параллельное программирование» в список хабов. Но ведь не все процессоры в мире имеют только одно ядро! Если процессор многоядерный, то несколько потоков действительно могут выполняться параллельно. Считайте, что хаб «Параллельное программирование» в списке хабов предназначен для тех, у кого многоядерные процессоры. А именно для многопоточного программирования просто не было подходящего хаба (по крайней мере, он может быть, но я его не нашёл). Кстати, так вы хотите продолжение статьи?
Вопрос не в хабе, а в том, что хорошо бы глубже разобраться в предмете.
Смысл многопоточного программирования состоит в том, что программа разделяется на несколько частей, которые выполняются одновременно (однако, если в системе процессор с одним и только одним ядром, то это не совсем так).Эти части называются потоками. У потоков, как и у процессов, есть свои собственные код и данные, они также могут обращаться к общим ресурсам.
Кроме многопоточности, существует много других формализмов для записи параллельных программ, поэтому ссылаться только на параллелизм для определения многопоточности нельзя.
Кстати, так вы хотите продолжение статьи?
Я – нет.
Для начала прочти "C++ Concurrency in Action" Энтони Уильямса

Ох уж это многопоточное программирование