Подтвердить что ты не робот

Могу ли я получить Unix pthread.h для компиляции в Windows?

Если я попытаюсь скомпилировать программу с помощью

#include <pthread.h>

я получаю сообщение об ошибке:

pthread.h: No such file or directory

Можно ли его компилировать в среде Windows?

Я использую Vista с последним MinGW.

Я не хочу использовать Microsoft Windows Services для UNIX версии 3.5, так как мне придется переместить это в среду Unix.

4b9b3361

Ответ 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 (например, см. здесь).

Ответ 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.

Вышеуказанные два являются наиболее известными способами для этого.

Надеюсь, это поможет.