c++ - C++中的异步函数调用

标签 c++ asynchronous

这是我在 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/

相关文章:

具有两个不同条件的 C++ do/while 循环

c++ - API Hooking 在整个过程中生效——包括 EXE 和 DLL

具有 2 个键的 C++ 映射,因此可以使用任何 1 个键来获取值

c++ - 我可以将 std::atomic<int64> 放置在共享内存中并期望原子操作吗?

c# - 为什么在线程中运行异步操作比纯任务或纯线程操作慢得多

c# - 个人等待与 Task.WhenAll

分页中内容的异步加载

c++ - 与 char 相比的位域大小

javascript - 在 GNOME 扩展中运行异步函数

c# - 使用 ToList 的异步、等待和任务