在Windows 10通用应用程序中使用Boost

时间:2015-08-12 10:45:14

标签: c++ boost windows-10 win-universal-app

我正在开发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

1 个答案:

答案 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

希望这有帮助。