这是我在 Java 中使用的一些代码,用于在 Java 中进行异步函数调用:
public class AsyncLogger
{
public static asyncLog = null;
public static ExecutorService executorService = Executors.newSingleThreadExecutor();
public static AsyncLogger GetAsyncClass()
{
if(asyncLog == null)
{
asyncLog= new AsyncLogger();
}
return asyncLog;
}
public void WriteLog(String logMesg)
{
executorService.execute(new Runnable()
{
public void run()
{
WriteLogDB(logMesg);
}
});
}
public void ShutDownAsync()
{
executorService.shutdown();
}
}
这是一个带有静态 ExecutorService 的单例类,WriteLogDB 将作为异步函数调用。所以我可以在不影响主流程的情况下异步处理 WriteLogDB 中的代码。
我能得到像这样的 C++ 等价物吗?
最佳答案
std::thread([](){WriteLogDB(logMesg);}).detach();
或者如果您需要等待结果:
auto result = std::async(std::launch::async, [](){WriteLogDB(logMesg);});
// do stuff while that's happening
result.get();
如果您受困于 2011 年之前的编译器,那么就没有标准的线程工具;你需要使用像Boost这样的第三方库,或滚动您自己的特定于平台的线程代码。 Boost 有一个类似于新标准类的线程类:
boost::thread(boost::bind(WriteLogDB, logMesg)).detach();
关于c++ - C++中的异步函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12583175/