#include <stdio.h>
#include <functional>
#include <memory>
#include <map>
#include <vector>
class WorkB
{
public:
WorkB() = default;
virtual ~WorkB() = default;
void Doit(int ret) {
if (notify_) {
notify_(ret, this);
}
}
public:
std::function<void(int, WorkB*)> notify_;
};
class WorkA
{
public:
WorkA() = default;
virtual ~WorkA() = default;
void AddOne(WorkB *p) {
p->notify_ = [&](int, WorkB*) {
wl.erase(wl.begin());
};//给notify 赋值
wl.push_back(p);
}
std::vector<WorkB*> wl;
};
int main()
{
WorkA a;
printf("wl size %d\n", a.wl.size());
WorkB *b = new WorkB();
a.AddOne(b);
printf("wl size 111 %d\n", a.wl.size());
b->Doit(0);
printf("wl size 222 %d\n", a.wl.size());
return 0;
}
有个场景,A是主线程,向B投递任务,出来完之后,回调A删除记录的元素,A非全局的。
本文详细描述了一个C++编程场景,涉及WorkA类作为主线程,通过WorkB类处理任务,并在任务完成后通过回调机制删除WorkA中的记录。展示了如何在多线程环境中使用函数指针实现线程安全的通信。
1万+

被折叠的 条评论
为什么被折叠?



