/*! * \brief 功能概述 转发点调用这个函数 * \param 参数描述 nTimeOut_是等待超时的时间 * \return 返回值描述 返回true * \author zzy * \date 2015/5/27 */ bool CValueBase::QtWaitForMultipleObjects(int nTimeOut_) { if (m_pControlTimer == NULL) { m_pControlTimer = new QTimer; connect(m_pControlTimer,SIGNAL(timeout()),this,SLOT(OnTimeOut())); } m_pControlTimer->start(nTimeOut_); while (1) { if (CONTROL_FAILURE == m_nControlFlag) { qDebug()<<"执行失败"; m_strResultMessage = "失败"; m_pControlTimer->stop(); return true; }else if (CONTROL_SUCCEED == m_nControlFlag) { qDebug()<<"执行成功"; m_strResultMessage = "成功"; m_pControlTimer->stop(); return true; }else if (CONTROL_TIMEOUT == m_nControlFlag) { qDebug()<<"执行超时"; m_strResultMessage = "超时"; m_pControlTimer->stop(); return true; } QCoreApplication::processEvents(); QThread::usleep(1000); } return false; }
void CMessageTask::Run() { // call task specific initialization code. if ( !OnInit() ) { #if INCLUDE_vTaskDelete == 1 Delete(); return; #else // The task must not start due to initialization problem, but the FreeRTOS // vTaskDelete function is not defined by configuration file. Suspend the task. Suspend(); #endif } CMessage msg; for (;;) { if ( m_queue.Receive(&msg, m_nTimeOut) == pdTRUE ) { // Message Handling routine // Call the delegate, if one, before try to dispatch the event if (m_pDelegate) m_pDelegate->OnHandleEvent(msg); DispatchMessage(msg); // Call the delegate, if one, after tried to dispatch the event if (m_pDelegate) m_pDelegate->DidHandleEvent(msg); } else { // TODO: STF - timeout expired. OnTimeOut(); } } }
ScrollLabelEx::ScrollLabelEx(QWidget *parent) : QWidget(parent) , ui(new Ui::ScrollLabelEx) , m_timer(this) , m_pauseTimer(this) , m_intervalTime(100) , m_frame(0) , m_pixmapPerFrame(-2) , m_pauseTime(2000) { ui->setupUi(this); connect(&m_timer, SIGNAL(timeout()), this, SLOT(OnTimeOut())); connect(&m_pauseTimer, SIGNAL(timeout()), this, SLOT(OnPauseTimeOut())); m_timer.setInterval(m_intervalTime); m_pauseTimer.setInterval(m_pauseTime); m_pauseTimer.setSingleShot(true); }
void CEventThread::RunThread() { Log(StrF(_T("Start of CEventThread::RunThread() Name: %s"), m_threadName)); m_threadRunning = true; m_threadWasStarted = true; HANDLE *pHandleArray = new HANDLE[m_eventMap.size()]; int indexPos = 0; for(EventMapType::iterator it = m_eventMap.begin(); it != m_eventMap.end(); it++) { pHandleArray[indexPos] = it->first; indexPos++; } SetEvent(m_hEvt); ResetEvent(m_hEvt); while(m_exitThread == false) { DWORD event = WaitForMultipleObjects((DWORD)m_eventMap.size(), pHandleArray, FALSE, m_waitTimeout); if(event == WAIT_FAILED) { LPVOID lpMsgBuf = NULL; DWORD dwErr = GetLastError(); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL); ASSERT(!lpMsgBuf); LocalFree(lpMsgBuf); } else if(event == WAIT_TIMEOUT) { OnTimeOut(m_param); } else { HANDLE firedHandle = pHandleArray[event - WAIT_OBJECT_0]; int eventId = m_eventMap[firedHandle]; if(eventId == EXIT_EVENT) { break; } else { Log(StrF(_T("Start of CEventThread::RunThread() - OnEvent %d - Name %s"), eventId, m_threadName)); OnEvent(eventId, m_param); Log(StrF(_T("End of CEventThread::RunThread() - OnEvent %d - Name: %d"), eventId, m_threadName)); } } } UndoFireEvent(EXIT_EVENT); SetEvent(m_hEvt); Log(StrF(_T("End of CEventThread::RunThread() Name: %s"), m_threadName)); m_threadRunning = false; }