函数指针

主要用于将函数定义为参数类型,便于传入

1
2
3
4
// C++
typedef std::function<void(void*)>CallBack;
// C
typedef void (*Callback)(void*);

Event

1
2
3
4
void Event::handleEvent(Callback cb, void* arg)
{
cb(arg);
}

Task

Task主要定义了 Event 要使用的回调函数

1
2
3
4
5
6
7
8
9
10
11
12
void Task::callback(void* arg)
{
Task* task = (Task*)arg;
Task->handle();
}

// 可能根据 Task 的类型变化而变化
void Task::handle()
{
// do something
// 特别是要使用类成员等非 static 内容等情况
}

Server

根据使用场景不同,可以通过回调函数的方式,在业务场景末端(顶层)如Server,灵活调整每个 Event 处理的事务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Server::handle()
{
//...
Task* t1 = Task("type1");
Task* t2 = Task("type2");
//...

for(auto& e: events)
{
// 根据使用场景不同,可以在业务末端灵活调整
e->handleEvent(t1->callback, t1);
e->handleEvent(t2->callback, t2);
}
}