- not tested code
- no error at my project(not use example)
#include "THCCommand.h" using namespace ThreadCommand; //THCCommand have retain count likely objective - c class UserCommand : public THCCommand { public: virtual bool Init(void* _ptr) { sleep(1); std::cout << "Init " << pthread_self() << "\n"; //if return false recall //if return true dont call this function again return true; } virtual bool Run(void* _ptr) { sleep(1); std::cout << "Run " << pthread_self() << "\n"; //if return false recall //if return true dont call this function again //first call raise at Init function return true return true; } virtual bool Clean(void* _ptr) { sleep(1); std::cout << "Clean " << pthread_self() << "\n"; //if return false recall //if return true dont call this function again, destruct class //first call raise at Run function return true return true; } } class UserEvent : public THCEvent { public: UserEvent() { //thread_id, priority, ... //if you want thread count, more regist category with another thread_id THCManager::Share()->SetCategory("thread_id", 0.1, NULL, NULL, NULL); } virtual ~UserEvent() { //if destruct, delete registed command } //tag is command user id virtual void CompleteCommand(std::string _category, std::string _tag, THCCommand* _command) { UserCommand* _user_command = (UserCommand*)_command; //raise at main thread std::cout << "CompleteCommand " << pthread_self() << "\n"; } } //run in main thread please void test(void) { UserEvent event; //regist command with thread_id //user_command is tag about command event.Run("thread_id", "user_command", new UserCommand()); while(true) { //CompleteCommand function caller THCManager::Share()->Update(); sleep(1); std::cout << "main loop " << pthread_self() << "\n"; } } - one thread is one category
- able to one THCEvent controll many thread
- thread(category) is just thread, THCCommand is queue
- THCManager::Share()->Update() is callback(raise at THCCommand Clean, destruct)