void BeaconHandler(uint8 beacon[]) { EndPointDevice.free_node = beacon[6]; EndPointDevice.csma_length = (MAX_DEVICE_NUM - EndPointDevice.free_node)/3+1; EndPointDevice.power = beacon[1]&0x01; if(EndPointDevice.connected == 0) //未连接,发送加入请求 { PostTask(EVENT_JOINREQUEST_SEND); } else //已连接,执行TDMA过程 { //TIME1_HIGH; if(EndPointDevice.power == 0) { A7139_Sleep(); } PostTask(EVENT_DATA_SEND); } }
uint8 RecvDataACK() { send_time = Frame_Time; while(GIO2==0) { if(Frame_Time>send_time+DATAACK_TIMEOUT) //60为DataACK接收超时,在收到ACK时不会进入if内 { TIME1_LOW; resend_count++; EndPointDevice.data_ack = 0; RXMode(); //TIME1_HIGH; PostTask(EVENT_CSMA_RESEND); return 0; } } A7139_ReadFIFO(DataRecvBuffer,MAX_PACK_LENGTH); RXMode(); if(PackValid()&&(Unpack(DataRecvBuffer) == DATAACK_TYPE)) //如果收到正确的ACK { DataACKHandler(); if(EndPointDevice.power == 1) { A7139_DeepSleep(); DIS_INT; } return 1; } else //否则进入CSMA阶段 { PostTask(EVENT_CSMA_RESEND); EndPointDevice.data_ack = 0; return 0; } }
bool PostTaskAndReplyImpl::PostTaskAndReply( const tracked_objects::Location& from_here, const Closure& task, const Closure& reply) { PostTaskAndReplyRelay* relay = new PostTaskAndReplyRelay(from_here, task, reply); if (!PostTask(from_here, Bind(&PostTaskAndReplyRelay::Run, Unretained(relay)))) { delete relay; return false; } return true; }
Message::Ptr PushManagerTask::SyncProcessTask() { if (task_thread_ == NULL) { return Message::Ptr(NULL); } if(!is_register_) { PostTask(); is_register_ = true; } task_thread_->Start(); // Block there return Message::Ptr(); }
int32_t main() { // 创建两条线程,一条是工作线程,一条是监视线程 CTaskThreadManager::Instance().Init(WORK_THREAD); CTaskThreadManager::Instance().Init(MONITORING_THREAD); auto taskThread = CTaskThreadManager::Instance().GetThreadInterface(WORK_THREAD); std::shared_ptr<CTask> spTask; spTask.reset(new CLoginTask); taskThread->PostTask(spTask, 1); getchar(); CTaskThreadManager::Instance().UninitAll(); return 0; }
Message::Ptr Task::SyncProcessTask() { PostTask(); Message::Ptr msg = WaitTaskDone(); queue_layer_->AsyncRemoveTask(shared_from_this()); return msg; }
void TaskRunner::Stop() { PostTask(FROM_HERE, Bind(&TaskRunner::DoStop, Unretained<TaskRunner>(this))); }