Multithreading C++;11线程:在主线程上运行std::asynch的平台无关方式

Multithreading C++;11线程:在主线程上运行std::asynch的平台无关方式,multithreading,c++11,Multithreading,C++11,这是一个问题,但公认的答案几乎与平台无关,也不适用于通常的应用程序(您无法控制主线程循环) 因此,我所追求的与libdispatch所做的非常相似(指定主线程队列来运行从后台线程触发的东西),但是使用纯C++11。我还希望避免使用计时器,因为它们通常具有非常低的优先级,并且可能执行不可靠(取决于主线程的负载) 用法可以简单到: run_on_main_thread([]() { myGui.refresh(); }; 在完成一些工作后在后台线程中调用。理想情况下,它将同时允许同步和异步执行 当

这是一个问题,但公认的答案几乎与平台无关,也不适用于通常的应用程序(您无法控制主线程循环)

因此,我所追求的与libdispatch所做的非常相似(指定主线程队列来运行从后台线程触发的东西),但是使用纯C++11。我还希望避免使用计时器,因为它们通常具有非常低的优先级,并且可能执行不可靠(取决于主线程的负载)

用法可以简单到:

run_on_main_thread([]() { myGui.refresh(); };
在完成一些工作后在后台线程中调用。理想情况下,它将同时允许同步和异步执行


当然,我不是要一个完整的解决方案,而是要一些如何用纯C++11实现的想法。我甚至可以想象更小的依赖于平台的部分(在一个中立的包装器中),它们允许控制执行(比如来自线程的本机句柄)。但是我不知道如何使任务在特定线程上运行(无论是主线程还是手动创建的后台线程)。

您是在问如何编写事件循环吗?比如说,一个std::function的生产者-消费者队列,主线程运行一个消费者(并不缺少生产者-消费者队列实现)。今天的应用程序已经有了一个偶数循环。我不需要写一个。但我也无法控制,我真的不想在意,因为这是特定于平台的。我正在寻找一种以平台无关的方式将任务注入主线程的想法,就像GCD(libdispatch)对其工作队列所做的那样。因此,您想知道如何编写通用的、可移植的、与框架无关的代码,这些代码可以神奇地与曾经编写的每个特定于应用程序的事件循环通信,或者是将来要写的。我认为这样的壮举是不可能的。没错,看起来你100%地得到了我的分数。我喜欢魔术。我想我可以证明这一点,特别是考虑到“适用于任何当前和未来框架”的要求,这个任务相当于。基本上,无论你想出什么方法,我都可以发明一个专门设计来打破它的事件循环系统。无论如何,祝你好运——你会需要它的。你是在问如何编写事件循环吗?比如说,一个std::function的生产者-消费者队列,主线程运行一个消费者(并不缺少生产者-消费者队列实现)。今天的应用程序已经有了一个偶数循环。我不需要写一个。但我也无法控制,我真的不想在意,因为这是特定于平台的。我正在寻找一种以平台无关的方式将任务注入主线程的想法,就像GCD(libdispatch)对其工作队列所做的那样。因此,您想知道如何编写通用的、可移植的、与框架无关的代码,这些代码可以神奇地与曾经编写的每个特定于应用程序的事件循环通信,或者是将来要写的。我认为这样的壮举是不可能的。没错,看起来你100%地得到了我的分数。我喜欢魔术。我想我可以证明这一点,特别是考虑到“适用于任何当前和未来框架”的要求,这个任务相当于。基本上,无论你想出什么方法,我都可以发明一个专门设计来打破它的事件循环系统。无论如何,祝你好运,你会需要它的。