回调框架 不知道异步可以用不,在尝试
来源:互联网 发布:烟台海普 软件 编辑:程序博客网 时间:2024/05/03 20:31
#include <iostream>using namespace std;class ITransaction{public:virtual ~ITransaction(){}};class Task{public:virtual int process(ITransaction *) = 0;virtual void doAfterSync(ITransaction *ctx){}void setCompleteListener(Task *l){mListener = l;}void complited(ITransaction *ctx){std::cout << "complited..." << std::endl;if (mListener) {mListener->doAfterSync(ctx);} else {std::cout << "mListener is null" << std::endl;}}private:Task *mListener;};enum {START = 0,A_START,A_COMPLETE,B_START,B_COMPLETE};std::string strStatus[] = {"start", "a_start", "a_complete", "b_start", "b_complete"};class Transaction : public ITransaction{public:Transaction():status(START){}int status;};class TaskA : public Task{public:TaskA(){}void setBTask(Task *taskB){taskB_ = taskB;}int process(ITransaction *ctx){ctx_ = dynamic_cast<Transaction *>(ctx);std::cout << "TaskA is running..., status is " << strStatus[ctx_->status] << std::endl;switch (ctx_->status){case START:ctx_->status = A_START;std::cout << "status is " << strStatus[ctx_->status] << std::endl;taskB_->setCompleteListener(this);taskB_->process(ctx_);return 1; // not finishedcase B_COMPLETE:complited(ctx_);return 0;}}void doAfterSync(ITransaction *ctx){std::cout << "TaskA::doAfterSync"<< std::endl;if (ctx_->status == B_COMPLETE) {process(ctx);}}private:Task *taskB_;Transaction *ctx_;};class TaskB : public Task{public:int process(ITransaction *ctx){std::cout << "TaskB is running..." << std::endl;ctx_ = dynamic_cast<Transaction *>(ctx);ctx_->status = B_COMPLETE;std::cout << "status is " << strStatus[ctx_->status] << std::endl;complited(ctx_);return 0;}private:Transaction *ctx_;};class Controller{public:Controller(TaskA *taskA, TaskB *taskB) : taskA_(taskA), taskB_(taskB){}void do_process(Transaction *ctx_){taskA_->process(ctx_);}TaskA *taskA_;TaskB *taskB_;};int main(){Transaction *ctx = new Transaction;TaskA *taskA = new TaskA();TaskB *taskB = new TaskB();taskA->setBTask(taskB);Controller *ctl = new Controller(taskA, taskB);ctl->do_process(ctx);return 0;}
0 0
- 回调框架 不知道异步可以用不,在尝试
- 你可以不知道原因,但是不能停止尝试。httplook抓取路由配置界面信息
- 不尝试怎么知道会失败??
- 不知道可以不可以
- 不知道在干什么
- 在不知道数组数量的时候你可以用List
- 关于struts2 验证框架在联网的时候可以用,不联网不起作用的问题
- 关于struts2 验证框架在联网的时候可以用,不联网不起作用的问题
- 有些秘密可以假装不知道
- 不知道自己在幹什麽!
- 不知道自己在干什么
- 不知道在笑什么?
- 不知道在想什么
- 尝试绕过ptrace保护 不知道算不算成功
- 不知道用快捷键
- 由于不知道哪里可以放源程序,所以只有在这里说说思路了。
- 不知道
- 不知道
- 页面链接跳转小知识
- Linux的inode的理解
- websocket
- android app 测试case积累
- Java设计模式---单例模式
- 回调框架 不知道异步可以用不,在尝试
- Hibernate之HelloWorld
- haproxy frontend 和backend
- git mac github 使用
- .9图片四个边的含义
- 七大排序算法
- Cocos2dx中播放多个音效冲突问题
- 学而时习之
- 重定向与转发的区别