2009-12-24 5 views
1

Я хочу получить системное время, включая дробную часть секунд. Возможно ли это в стандарте c (ANSI C)? Если нет, то скажите мне несколько библиотек для оконных ОС, чтобы я сделал это возможным. В Linux у меня есть следующий код, который отлично подходит для меня.Как получить дробную часть секунд в UTCTime, используя time.h

#include <sys/time.h>                 
#include <time.h>                  
#include <stdlib.h>                 
#include <stdio.h>                 

int main(void)                  
{                      
    char buffer[30];                 
    struct timeval tv;                 

    time_t curtime;                  



    gettimeofday(&tv, NULL);               
    curtime=tv.tv_sec;                 

    strftime(buffer,30,"%m-%d-%Y %T.",localtime(&curtime));       
    printf("%s%ld\n",buffer,tv.tv_usec);            

    return 0;                   


    } 

Выход

12-25-2009 11: 09: 18,35443541

Пожалуйста, помогите мне, как это возможно для окна OS. ЕСЛИ ANSI C не позволяет мне.

ответ

1

Стандарт C не обеспечивает синхронизацию подсекундной резолюции.

POSIX действительно обеспечивает временную синхронизацию подсегмента - на самом деле это несколько разных способов сделать это, включая gettimeofday(), который вы показываете.

1

Как это:

#include <wtypes.h> 
int main() 
{ 
    SYSTEMTIME t; 
    GetSystemTime(&t); 
    int year = t.wYear; 
    int month = t.wMonth; 
    int day = t.wDay; 
    int hour = t.wHour; 
    int minute = t.wMinute; 
    int second = t.wSecond; 
    int second_fraction = t.wMilliseconds; 
    return 0; 
} 

Пара точек о производительности, если это важно для вас:

1) gettimeofday() довольно быстро, и если используется несколько потоков не вызывает worsenig от эффективности

2) Внутри localtime() есть вызов pthread_mutex_lock() (возможно, потому, что ему нужны некоторые системные настройки, такие как дневное время). Поэтому, когда вы используете его в многопоточном приложении, могут возникнуть проблемы с производительностью.

+0

@skwllsp: - Пожалуйста, скажите мне ссылку. или заголовочный файл, который я должен включить для SYSTEMTIME и GetSystemTime ....! – Siddiqui

+0

#include

+0

Спасибо Skwllsp, я пробовал свой код, но его не дает точного результата. – Siddiqui