ThreadPool 实现问题 #35
YiRanMushroom
started this conversation in
Show and tell
Replies: 5 comments
|
我不认为这是好的改动,且你描述十分混乱。 |
0 replies
|
不好意思我现在中文能力不太好,我的意思就是任务队列如果使用std::function<void()>在这个程序中是足够的,使用std::packaged_task<void()>显得思维混乱。具体来说,using Task = std::packaged_task<void()>不是必须的,如果改成using Task = std::function<void()>,只改动这一处,程序依然可以正常编译,运行。参考:https://godbolt.org/z/5hc8zEzs1 |
0 replies
|
其实我主要是做了好几步类型擦除,擦除也就是通过包装。 之所以 然后插入到容器中
|
0 replies
|
倒也不是混乱,稍微想一下就能注意到无非是擦除了点类型,包装一下,Task 用什么都问题不大,这个无所谓。 |
0 replies
|
这个确实问题不大,使用packaged_task也不会有性能问题。总之我觉得不好的地方是使用std::packaged_task<void()> implies 这个变量使用多线程有关操作,但实际上没有使用相关功能。这个问题不大不改也行,就是我刚开始看的时候造成一些误解所以在这提出来。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
任务队列其实可以使用std::queue<std::function<void()>>,参考如下代码:
直接改写成std::function<void()> tasks_; 应该可以通过编译。
这里存在思维混乱问题,using Task = std::packaged_task<void()>; 其实根本没怎么使用,在创建共享指针时使用的是std::packaged_task<RetType()>, 我认为可能直接改成 using Task = std::function<void()>就对了。
All reactions