c++ - 尝试排队一些可变的工作
问题描述
我正在尝试编写一个工作队列,但是直到以后我才真正想知道参数类型,无论如何我正在尝试编写一些大意的东西
std::queue<std::packaged_task<void()>> workQueue{};
template <typename... Args>
void Foo::doWork(char const* key, Args&&... args)
{
// this already works if called directly but would like to do this work from a separate thread pulling from that queue
}
template <typename... Args>
void Foo::enqueue(char const* key, Args&&... args)
{
// Cannot seem to push this work into a queue type error occurs
workQueue.emplace(std::bind(&Foo::doWork<Args&&...>, this, key, args...));
}
示例用法
foo.enqueue("bar", 3, 4, "wham", true);
我正在尝试以合理的速度将这项工作排队,以使尽可能多的工作远离该队列的收集端。我只是将参数序列化为类似字符串流的东西,但随后我将不得不在反序列化方面进行某种类型的强制转换,担心消息+边界等,我想避免这种情况。任何人都知道我在这里可能做错了什么以获得类型错误,还试图避免提升,因此最好使用 stl 容器。我无法提前知道结构来专门研究这个。此外,您还想确保将参数复制到队列中,而不是简单地引用,这样即使在从调用函数的堆栈中取消分配后它们也很有用。
解决方案
推荐阅读
- content-management-system - 如何在 Directus 中设置相对日期?
- regex - 不在字符串字符内的字符的 Perl 正则表达式
- javascript - 编辑此函数以返回最近的文件路径
- testing - 带有工作测试的样板 A-Frame 1.0.4+ 组件项目的示例是什么?
- javascript - 尝试深度克隆对象数组会遗漏元素
- python - 有没有办法在 pygame 中将对象保持在边界内,并在按住方向键时使其移动?
- postgresql - 通过 PostgreSQL 安装程序安装期间 PostGIS 抛出错误
- reverse-engineering - 在 Frida 拦截方法中读取结构/对象的值
- mysql - 如何将 Drupal 8 站点移动到新服务器?
- python - asyncio/aiohttp - create_task() 阻止事件循环,在“此事件循环已在运行”中收集结果