我正在开发Windows 10通用应用,主要针对Windows手机。当尝试使用boost时,我会收到这样的错误:
boost/asio/detail/impl/win_thread.ipp(48): error C2039: 'TerminateThread': is not a member of '`global namespace''
据我所知,出现此问题的原因是使用win32 api进行提升,Windows 10通用应用程序不支持此功能。我尝试了1.58(当前官方发布)和1.59(发布候选版)。有没有我失踪的旗帜?您是否有任何与boost和Windows通用应用程序支持相关的信息?
我创建了最小程序来重现此错误:
#include <boost/asio.hpp>
int main()
{
return 0;
}
实际上我得到的第一个错误是:
c:\program files (x86)\windows kits\10\include\10.0.10240.0\um\processthreadsapi.h(491): error C3861: 'FlsAlloc': identifier not found
答案 0 :(得分:3)
并非所有Boost库都可用于Windows Universal Apps。努力使其中更多可用于通用应用程序正在进行中。以下是更多信息:https://blogs.msdn.microsoft.com/vcblog/2014/07/18/using-boost-libraries-in-windows-store-and-phone-applications/
帖子作者Steven Gates发表评论表明Boost.Asio可能使用禁用的API。我无法链接到个别评论,所以部分引用(强调我的):
史蒂文盖茨 @Li Ning 82:Boost.ASIO依赖于最近刚刚在Windows Phone 8上允许的WinSock API。但我敢打赌 ASIO正在使用被禁止的其他API ,你必须更换。
此外,Windows Universal应用程序中不提供CreateThread,CreateThreadPool等。
说完上述内容之后,我将假设您必须使用除Boost.Asio之外的其他内容,其中包含一些可能有用的其他信息:
模拟多线程的推荐方法是使用Task.Run。您也可以使用TaskFactory.StartNew。
完成后,请点击Win32 & COM APIs for Windows Runtime apps列表。和Alternatives to Windows APIs in Windows Runtime apps。
希望这有帮助。