Точка входа в процедуру InitializeConditionVariable не может быть расположена в kernel32.dll - PullRequest
4 голосов
/ 17 мая 2010

У меня проблема с производителем-потребителем (используется поток Windows). Он компилируется успешно, но при запуске выдает следующую ошибку

Не удалось найти точку входа в процедуру InitializeConditionVariable в динамической библиотеке Kernel32.dll.

Можете ли вы сказать, что было бы причиной

Ответы [ 2 ]

5 голосов
/ 17 мая 2010

Это функция API, которая доступна только в Vista и выше. Я предполагаю, что вы запускаете этот код на XP.

Чтобы избежать случайного использования функций API, которые доступны только в более поздних версиях Windows, необходимо определить макрос _WIN32_WINNT:

#define _WIN32_WINNT 0x502   // Designed to run on Windows XP SP2 and up
#include <windows.h>

Если вы не установите его, то по умолчанию в более поздних версиях Windows SDK он по умолчанию равен 0x600, и в качестве целевой операционной системы выбрана Vista. Кстати, вам, вероятно, придется отказаться от условных переменных. В вашем вопросе недостаточно подробностей, чтобы предложить подходящую замену. Код, который использует мьютексы, не должен быть трудным для поиска.

2 голосов
/ 14 июля 2010

InitializeConditionVariable и соответствующие API переменных-условий доступны только в Windows Vista и более поздних версиях. Вы можете использовать Boost.Thread , чтобы обеспечить реализацию условной переменной, которая работает в Windows XP. Я написал статью в своем блоге о том, как использовать ее для очереди производителя / потребителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...