日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自己写 localtime 函数(含完整注释,代码)转载

發布時間:2025/5/22 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自己写 localtime 函数(含完整注释,代码)转载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

localtime()在多線程中使用的少的時候是不會出錯的

現localtime和ctime等函數在linux中的返回值均存放在一個靜態區中,即TLS變量。如果在多線程程序中比較頻繁的調用此函數,則可能出現內容錯亂的情況。

//曾在某平臺下多線程中使用localtime庫函數。可惡的是,每當程序運行
//一段時間后,都要出現內存泄露。查了數個夜晚為什么,無從斷定。
//只能狠狠心,自己寫了個localtimes,功能與localtime庫函數相同。
//有了它以后,我就不再因內存泄露而煩惱了。
//要知道“內存泄露”是程序員大的一大恥辱。

//這個localtimes在多線程下已經運行了3年,還沒發生問題,放心使用。

//一年中每個月的天數,非閏年
const?char?Days[12]?=?{31,?28,?31,?30,?31,?30,?31,?31,?30,?31,?30,?31};

/*++------------------------------------------------------------------------

??Function:
??????????????localtimes

Modification?History

Jurassic???????????2002.1????Created.??????????????
--------------------------------------------------------------------------*/
void
__stdcall
localtimes(
???time_t?time,
???long?timezone,
???????????struct?tm?*tm_time
)
{
????unsigned??__int32?n32_Pass4year;
??????????????__int32?n32_hpery;

????//計算時差
????time=time-timezone;
????
????if(time?<?0)
????{
???????time?=?0;
????}
????//取秒時間
????tm_time->tm_sec=(int)(time?%?60);
????time?/=?60;
????//取分鐘時間
????tm_time->tm_min=(int)(time?%?60);
????time?/=?60;
????//取過去多少個四年,每四年有?1461*24?小時
????n32_Pass4year=((unsigned?int)time?/?(1461L?*?24L));
????//計算年份
????tm_time->tm_year=(n32_Pass4year?<<?2)+70;
????//四年中剩下的小時數
????time?%=?1461L?*?24L;
????//校正閏年影響的年份,計算一年中剩下的小時數
????for?(;;)
????{
????????//一年的小時數
????????n32_hpery?=?365?*?24;
????????//判斷閏年
????????if?((tm_time->tm_year?&?3)?==?0)
{
????????????//是閏年,一年則多24小時,即一天
????????????n32_hpery?+=?24;
}
????????if?(time?<?n32_hpery)
{
????????????break;
}
????????tm_time->tm_year++;
????????time?-=?n32_hpery;
????}
????//小時數
????tm_time->tm_hour=(int)(time?%?24);
????//一年中剩下的天數
????time?/=?24;
????//假定為閏年
????time++;
????//校正潤年的誤差,計算月份,日期
????if?((tm_time->tm_year?&?3)?==?0)
????{
if?(time?>?60)
{
time--;
}
else
{
if?(time?==?60)
{
tm_time->tm_mon?=?1;
tm_time->tm_mday?=?29;
return?;
}
}
????}
????//計算月日
????for?(tm_time->tm_mon?=?0;?Days[tm_time->tm_mon]?<?time;tm_time->tm_mon++)
????{
??????????time?-=?Days[tm_time->tm_mon];
????}

????tm_time->tm_mday?=?(int)(time);

????return;

}

轉載于:https://www.cnblogs.com/aixingfou/archive/2011/07/13/2105672.html

總結

以上是生活随笔為你收集整理的自己写 localtime 函数(含完整注释,代码)转载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。