将 Boost 与 Windows 10 个通用应用程序一起使用

Using Boost with Windows 10 universal app

我正在开发 Windows 10 个通用应用程序,主要针对 Windows 手机。尝试使用 boost 时出现如下错误:

boost/asio/detail/impl/win_thread.ipp(48): error C2039: 'TerminateThread': is not a member of '`global namespace''

据我了解,此问题是由于使用 Windows 10 通用应用程序不支持的 win32 api 提升引起的。我尝试了 1.58(当前官方版本)和 1.59(候选版本)。有没有我遗漏的标志?您有任何与提升和 Windows 通用应用程序支持相关的信息吗?


我创建了最小程序来重现此错误:

#include <boost/asio.hpp>

int main()
{
    return 0;
}

事实上我得到的第一个错误是:

c:\program files (x86)\windows kits\include.0.10240.0\um\processthreadsapi.h(491): error C3861: 'FlsAlloc': identifier not found

并非所有 Boost 库都可用于 Windows 通用应用程序。正在努力使更多的人可以与通用应用程序一起使用。这里有更多信息:https://blogs.msdn.microsoft.com/vcblog/2014/07/18/using-boost-libraries-in-windows-store-and-phone-applications/

Post 作者 Steven Gates 的评论表明 Boost.Asio 可能使用了被禁止的 API。我无法 link 个人评论,所以部分引用这里(强调我的):

Steven Gates @Li Ning 82: Boost.ASIO depends on the WinSock API, which just recently is now allowed on Windows Phone 8. However I'd bet that ASIO is using other APIs that are banned, that you'd have to replace.

此外,CreateThread、CreateThreadPool 等在 Windows 通用应用程序中不可用。

综上所述,我假设您必须使用 Boost.Asio 以外的其他东西,其中有一些可能有用的额外信息:

推荐的模拟多线程的方法是使用Task.Run. You can also use TaskFactory.StartNew

为了完成,这里是 Win32 & COM APIs for Windows Runtime apps. and Alternatives to Windows APIs in Windows Runtime apps 的列表。

希望对您有所帮助。