/////////////////////////////////////////////////
#include <iostream>
#include <windows.h>
using namespace std;
////////////////////////////////////////////////
void main()
{
_LARGE_INTEGER time_start; /*開始時間*/
_LARGE_INTEGER time_over; /*結束時間*/
double dqFreq; /*計時器頻率*/
LARGE_INTEGER f; /*計時器頻率*/
QueryPerformanceFrequency(&f);
dqFreq=(double)f.QuadPart;
QueryPerformanceCounter(&time_start);
Sleep(1000);/*循環耗時*/
QueryPerformanceCounter(&time_over);
cout<<((time_over.QuadPart-time_start.QuadPart)/dqFreq)<<endl;//單位爲秒,精度爲1000 000/(cpu主頻)微秒
}
//linux
struct timeval tv;
int64 res;
gettimeofday(&tv, NULL);
InterlockedExchange(a,b)能以原子操作的方式交換倆個參數a, b並返回a以前的值;假設有線程1和線程2調用f()函數,線程1先調用到InterlockedExchange(&g, TRUE);線程2再調用時,函數InterlockedExchange()總返回TRUE,則線程2sleep(0);而直到線程1調用InterlockedExchange(&g, FALSE);後線程2纔可能由於調用InterlockedExchange(&g,, TRUE),返回FALSE而退出循環接着工作。這樣在//進行其他的操作這裏就能操作共享數據而不會引起爭議。當然這種方法會浪費cpu時間,因爲cpu要不斷地執行InterlockedExchange()函數,使用時應注意。