Использование потоков повышения при компиляции с /clr
Я отказался от создания графического интерфейса непосредственно из Windows API, поэтому я собираюсь использовать формы. Я хотел бы многопоточность моего приложения и обернуть графический интерфейс в классе и поместить его в отдельный поток. Когда я нажимаю кнопку и т. Д., Это изменяет значение в структуре, которая будет считываться из основного потока. Моя проблема в том, что когда я компилирую свое приложение, я получаю сообщение об ошибке с компоновщиком.
1> Core.obj: ошибка LNK2022: сбой операции метаданных (8013119F): существует TypeRef, который должен иметь, но не имеет соответствующий TypeDef: (фиктивный): (0x0100001f).
Мой код для основного заключается в следующем.
int main () { // создаем указатель на объект потока boost::thread *GUIThread; // создаем указатель на GUIInterface, который содержит функцию-член, которая // содержит приложение::Run GUIInterface *myinterface; myinterface = новый GUIInterface; GUIThread = новый boost::thread(boost::bind(&GUIInterface::MainFunction, myinterface)); вернуть 0; }
Он отлично работает при создании класса и вызове функции в основном потоке, но использование boost вызывает проблемы. Я построил boost, используя правильный компилятор MSVC-10.0, и библиотека потоков всегда работала в прошлом, но clr просто вызывает проблемы. Любые рекомендации о том, как это исправить? ИЛИ если мне просто нужно использовать многопоточность.net (если мне это нужно, мне действительно нужны ссылки на то, как использовать с с ++, большинство вещей, которые я нахожу, находится в C#). Благодарю.
1 ответ
Есть две проблемы при использовании boost::thread
в управляемом приложении. Первое - ошибка компоновщика, с которой вы столкнулись. Вторая ошибка инициализации при запуске приложения, если boost::thread
реализация статически связана с вашим приложением.
Обе проблемы упоминаются в более раннем отчете об ошибке. Я не знаю, изменилось ли это в более поздних выпусках; 1.43 имеет такую же проблему. Я полагаю, нет, как дело было закрыто wontfix
,