Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
void (^dispatch_block_t)(void)
gcdpp::gcdpp_dispatch_async(gcdpp::gcdpp_dispatch_get_global_queue(gcdpp::GCDPP_DISPATCH_QUEUE_PRIORITY_HIGH) ,[=]{
// а вот здесь уже вызываем любую функцию с любым количеством параметров, например
function(1, 2.0f, "Hello World");
} );
class Clazz
{
public:
std::string m_value;
void Foo(int a, float b, const std::string& c)
{
std::cout<<a<<b<<c<<std::endl;
};
};
typedef std::function<void(void)> task_t;
TEST(gcdppLib, Dispatch_05)
{
std::shared_ptr<Clazz> clazz = std::make_shared<Clazz>();
task_t task = std::bind(&Clazz::Foo, clazz, 1, 2.0f, "Hello World");
gcdpp::gcdpp_dispatch_async(gcdpp::gcdpp_dispatch_get_global_queue(gcdpp::GCDPP_DISPATCH_QUEUE_PRIORITY_HIGH), task);
}
std::queue<std::packaged_task<void()>> queue;
template<class FUNCTION, class ...ARGS>
std::future<typename std::result_of<FUNCTION(ARGS...)>::type>
dispatch(FUNCTION &&f, ARGS &&...args) {
std::packaged_task<typename std::result_of<FUNCTION(ARGS...)>::type()> task(std::bind(f,args...));
auto future = task.get_future();
queue.push(std::packaged_task<void()>(std::move(task)));
return future;
}
std::function<void(int, float, std::string)> function = [](int a, float b, const std::string& c)
{
EXPECT_TRUE(a == 1 && b == 2.0f && c == "Hello World");
};
auto future = dispatch(std::move(function), 1, 2.0f, "Hello World");
queue.back()();
Thread concurrency C++11, свой велосипед технологии (Apple) GCD