首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能编写能够在HPX和C++1x线程之间切换的代码?

是否有可能编写能够在HPX和C++1x线程之间切换的代码?
EN

Stack Overflow用户
提问于 2016-08-26 15:13:52
回答 2查看 215关注 0票数 1

由于API在hpx#include<thread>之间非常相似,所以有可能有相同的代码来运行hpx#include<thread>吗?

由于boost是hpx的一个要求,我的用例是有些系统是不允许boost的,有些是这样的,我希望在这两种系统上运行相同的代码,但如果可能的话使用hpx

假设我只使用hpx和线程中的特性,有这样做的例子吗?我能不能通过#ifdef

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-26 15:32:28

如果两个库的API完全相同,则可以使用有条件编译的类型别名:

代码语言:javascript
复制
#if defined(USE_HPX_THREADS)

#include <hpx/thread.hpp>

namespace my_library
{
    using my_thread = hpx::thread;
}

#elif defined(USE_STD_THREADS)

#include <thread>

namespace my_library
{
    using my_thread = std::thread;
}

#endif

或者,如果API不同,您可以创建自己的同构接口,根据预处理器定义使用不同的实现:

代码语言:javascript
复制
class my_thread 
{
private:
    // "Conditional type alias" like the example above.
    my_thread_handle _thread;

public:
    void join();
};

#if defined(USE_HPX_THREADS)

void my_thread::join()
{
    _thread.hpx_join();
}

#elif defined(USE_STD_THREADS)

void my_thread::join()
{
    _thread.std_join();
}

#endif

将实现分离到不同的文件中可能是个好主意。查看库,如SFML 一个真实世界的例子 (Unix和Win32文件夹)。

票数 3
EN

Stack Overflow用户

发布于 2016-08-26 17:50:17

std::threadhpx::thread的API是完全相同的,因此Vittorio描述的using技巧就能做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39169532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档