最近做的項目需要上傳數據給服務器,爲防止因網絡延遲導致服務器收到數據重複,給每條數據加一個批次號batchId由服務器判斷,批次號由當前時間年月日加一個計數器組成,例如2018061300001,計數器iCount累加,每天0點清零。因爲發送數據的地方很多,都是線程操作,本人技術有限,所以選擇了最簡單的WaitForSingleObject(mMutex,INFINITE)來解決變量互斥問題。
先定義全程變量
HANDLE mMutex ;
程序啓動時候初始化mMutex 。
mMutex =CreateMutex(NULL, FALSE, NULL);
線程裏操作變量之前鎖定
UINT ThreadSendAlarmInfomation (LPVOID lpParam)
{
WaitForSingleObject(mMutex ,INFINITE);
iCount++;
ReleaseMutex(mMutex );
CStringA currentTime,sbatchId;
CTime t=CTime::GetCurrentTime();
sbatchId.Format(_T("%s%05d"),t.Format("%Y%m%d"),iCount);
}