本文介绍了如何在C ++中使函数异步?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想调用一个异步的函数(完成此任务后,我将提供一个回调).
I want to call a function which will be asynchronous (I will give a callback when this task is done).
我想在单线程中执行此操作.
I want to do this in single thread.
推荐答案
可以使用现代C ++甚至是旧C ++和某些提升. boost和C ++ 11都包含用于从线程获取异步值的复杂工具,但是如果您只需要回调,则只需启动一个线程并调用它即可.
This can be done portably with modern C++ or even with old C++ and some boost. Both boost and C++11 include sophisticated facilities to obtain asynchronous values from threads, but if all you want is a callback, just launch a thread and call it.
1998 C ++/boost方法:
1998 C++/boost approach:
#include <iostream>
#include <string>
#include <boost/thread.hpp>
void callback(const std::string& data)
{
std::cout << "Callback called because: " << data << '\n';
}
void task(int time)
{
boost::this_thread::sleep(boost::posix_time::seconds(time));
callback("async task done");
}
int main()
{
boost::thread bt(task, 1);
std::cout << "async task launched\n";
boost::this_thread::sleep(boost::posix_time::seconds(5));
std::cout << "main done\n";
bt.join();
}
2011 C ++方法(使用gcc 4.5.2,需要使用此#define)
2011 C++ approach (using gcc 4.5.2, which needs this #define)
#define _GLIBCXX_USE_NANOSLEEP
#include <iostream>
#include <string>
#include <thread>
void callback(const std::string& data)
{
std::cout << "Callback called because: " << data << '\n';
}
void task(int time)
{
std::this_thread::sleep_for(std::chrono::seconds(time));
callback("async task done");
}
int main()
{
std::thread bt(task, 1);
std::cout << "async task launched\n";
std::this_thread::sleep_for(std::chrono::seconds(5));
std::cout << "main done\n";
bt.join();
}
这篇关于如何在C ++中使函数异步?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!