Могу ли я получить Unix pthread.h для компиляции в Windows?
Если я попытаюсь скомпилировать программу с помощью
#include <pthread.h>
я получаю сообщение об ошибке:
pthread.h: No such file or directory
Можно ли его компилировать в среде Windows?
Я использую Vista с последним MinGW.
Я не хочу использовать Microsoft Windows Services для UNIX версии 3.5, так как мне придется переместить это в среду Unix.
Ответы
Ответ 1
pthread.h
- это заголовок для API Unix/Linux (POSIX) для потоков. Уровень POSIX, такой как Cygwin, вероятно, скомпилирует приложение с #include <pthreads.h>
.
Собственный API потоковой загрузки Windows открывается через #include <windows.h>
, и он немного отличается от потоковой передачи Linux.
Тем не менее, существует замена библиотеки "glue", поддерживаемой http://sourceware.org/pthreads-win32/; обратите внимание, что он имеет некоторые незначительные несовместимости с MinGW/VS (например, см. здесь).
Ответ 2
Как упоминалось в @Ninefingers, pthreads являются unix-only. Только Posix, действительно.
Тем не менее, у Microsoft есть библиотека, которая дублирует pthreads:
Microsoft Windows Services для UNIX версии 3.5
Загрузка библиотеки
Ответ 3
pthread.h
не находится в Windows. Но у Windows есть обширная функция потоковой передачи, начиная с CreateThread.
Мой совет не попадает в WinAPI через объектив другого системного API. Эти системы разные. Это, как настоять на том, чтобы кататься на велосипеде Win32 с вашим удобным велосипедным сиденьем Linux. Ну, место может не подходить прямо, и в некоторых случаях оно просто упадет.
Темы в значительной степени работают одинаково для разных систем, у вас есть ThreadPools и мьютексы. Работая с обоими pthreads
и потоками Windows, могу сказать, что потоки Windows предлагают немного больше функциональности, чем pthread
.
Изучение другого API довольно просто, просто подумайте о понятиях (мьютекс и т.д.), а затем посмотрите, как создать один из них в MSDN.
Ответ 4
Есть, как я помню, два дистрибутива gnu toolchain для windows: mingw и cygwin.
Я ожидал бы работу cygwin - было сделано много усилий, чтобы создать среду "posadard" posix.
Инструментальная программа mingw использует msvcrt.dll для своей среды выполнения и, вероятно, будет раскрывать msvcrt "thread" api: _ beginthread, который определен в <process.h>
Ответ 5
Просто выберите пакет TDM-GCC 64x. (Он содержит 32 и 64-битные версии инструментальной комбинации MinGW и входит в опрятный установщик.) Более того, в нем содержится что-то, называемое библиотекой winpthread.
Он содержит заголовки pthread.h
, libwinpthread.a
, libwinpthread.dll.a
статических библиотек для 32-разрядных и 64-разрядных и требуемых .dlls libwinpthread-1.dll
и libwinpthread_64-1.dll
(это, начиная с 01-06 -2016).
Во время сборки вам нужно соединить с библиотекой libwinpthread.a
. Кроме этого, ваш код может быть таким же, как для собственного кода Pthread в Linux. Я до сих пор успешно использовал его для компиляции нескольких базовых программ Pthread в 64-битных окнах.
В качестве альтернативы вы можете использовать следующую библиотеку, которая обертывает API потоковой обработки окон в API pthreads:
pthreads-win32.
Вышеуказанные два являются наиболее известными способами для этого.
Надеюсь, это поможет.