localtime函式與localtime_r函式區別
阿新 • • 發佈:2019-02-10
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; }