⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testtask.cpp

📁 由GOOGLE的JINGLE项目中移植的网络库
💻 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 + -