// we use the timestamps from our hardware and must handle // the overflow every 60000ms static LONGLONG GetSysTimestamp(LONG Timestamp) { static LONGLONG oldTickCount = MyGetTickCount(); static LONGLONG oldTimestamp = 0, sysTimestamp = oldTickCount; LONGLONG timeDiff, newTickCount, temp; newTickCount = MyGetTickCount(); temp = (newTickCount - oldTickCount) / 60000; // minutes since last read // for Tx if (Timestamp == ~0) { return sysTimestamp + (newTickCount - oldTickCount) + (temp * 60000); } // for Rx oldTickCount = newTickCount; if (Timestamp < oldTimestamp) { timeDiff = (60000 - oldTimestamp) + Timestamp; } else { timeDiff = Timestamp - oldTimestamp; } oldTimestamp = Timestamp; timeDiff += (temp * 60000); sysTimestamp += timeDiff; return sysTimestamp; }
void CTcpView::CallBackData(char* pBuf, UINT nLen, long nConnectHandle, int nAction,int nType) { CTradePackData* pTradePackData = new CTradePackData(); pTradePackData->m_nTickCount = MyGetTickCount(); pTradePackData->m_nThreadId = GetCurrentThreadId(); pTradePackData->m_pBuf = pBuf; pTradePackData->m_nLen = nLen; pTradePackData->m_nConnectHandle = nConnectHandle; pTradePackData->m_nAction = nAction; pTradePackData->m_nType = nType; m_TradePackDataList.Add(pTradePackData); this->PostMessage(WM_TRADE_CALLBACK, 0, (LPARAM)pTradePackData); }