函數用法

1.使用QueryPerformanceFrequency 計算程序執行時間

/////////////////////////////////////////////////
#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);


2. InterlockedExchange

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()函數,使用時應注意。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章