1. 程式人生 > >localtime函式與localtime_r函式區別

localtime函式與localtime_r函式區別

struct tm *localtime(const time_t *clock);

這個函式在返回的時候,返回的是一個指標,實際的記憶體是localtime內部通過static申請的靜態記憶體,所以通過localtime呼叫後的返回值不及時使用的話,很有可能被其他執行緒localtime呼叫所覆蓋掉

    多執行緒應用裡面,應該用localtime_r函式替代localtime函式,因為localtime_r是執行緒安全的。

struct tm* localtime_r( const time_t* timer, struct tm* result );

下面這段程式輸出結果:

21:18:39

21:18:39

說明,localtime只會保留最後一份資料,如果在多執行緒中使用,會存在覆蓋的問題,不是執行緒安全的
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <stdio.h>

using namespace std;

int main(int argc, char *argv[])
{
    time_t tNow =time(NULL);
    time_t tEnd = tNow + 1800;
    //注意下面兩行的區別
    struct tm* ptm = localtime(&tNow);
    struct tm* ptmEnd = localtime(&tEnd);

    char szTmp[50] = {0};
    strftime(szTmp,50,"%H:%M:%S",ptm);
    char szEnd[50] = {0};
    strftime(szEnd,50,"%H:%M:%S",ptmEnd);
    

    printf("%s /n",szTmp);
    printf("%s /n",szEnd);
    

    system("PAUSE");
    return EXIT_SUCCESS;
}