?? testtask.cpp
字號:
#if defined(_MSC_VER) && _MSC_VER < 1300
#pragma warning(disable:4786)
#endif
#include "time.h"
#include "task.h"
#include "taskrunner.h"
using namespace buzz;
class MyTask2: public Task {
public:
MyTask2(Task * parent):Task(parent),flag(false){};
virtual int ProcessStart() {
if (!flag) {
return STATE_PRE_LOGIN;
} else {
return STATE_START_LOGIN;
}
};
virtual int ProcessResponse() {
return STATE_BLOCKED;
};
int Process(int state) {
switch (state) {
case STATE_PRE_LOGIN:
return STATE_START_LOGIN;
case STATE_START_LOGIN:
return STATE_RESPONSE;
default:
return Task::Process(state);
}
};
private:
enum {
STATE_PRE_LOGIN = STATE_NEXT,
STATE_START_LOGIN = STATE_NEXT + 1,
};
bool flag;
};
class MyTask: public Task {
public:
MyTask(Task * parent):Task(parent),flag(false){
};
virtual int ProcessStart() {
if (!flag) {
return STATE_PRE_LOGIN;
} else {
return STATE_START_LOGIN;
}
};
virtual int ProcessResponse() {
return STATE_BLOCKED;
};
int Process(int state) {
switch (state) {
case STATE_PRE_LOGIN:
return STATE_START_LOGIN;
case STATE_START_LOGIN:
return STATE_RESPONSE;
default:
return Task::Process(state);
}
};
private:
enum {
STATE_PRE_LOGIN = STATE_NEXT,
STATE_START_LOGIN = STATE_NEXT + 1,
};
bool flag;
};
class MyRunner: public TaskRunner {
public:
MyRunner() {
task = new MyTask(this);
task->Start();
task2 = new MyTask2(task);
task2->Start();
}
void WakeTasks() {
RunTasks();
}
int64 CurrentTime() {
return (int64)cricket::Time();
}
void OnStateChanged() {
if (task->Blocked())
task->Wake();
if (task2->Blocked())
task2->Wake();
}
private:
MyTask * task;
MyTask2 * task2;
};
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nShowCmd
)
{
MyRunner * runner = new MyRunner();
while(1) {
Sleep(3000);
runner->OnStateChanged();
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -