Pracuję nad wielowątkowym projektem C++ systemu Win32 i chciałbym użyć jednej z alternatywnych dla wątku localtime_*
dla localtime()
.localtime_r wsparcie dla MinGW
Niestety muszę użyć kompilatora MinGW, a localtime_s
nie może być używany poza materiałem Microsoft.
Problem polega na tym, że ani localtime_r
pracuje: powiązany fragment kodu jest
#include <ctime>
...
string getCurrentTime()
{
time_t t;
time(&t);
struct tm timeinfo;
//localtime_s(&timeinfo, &t);
localtime_r(&t, &timeinfo);
char buf[128];
strftime(buf, 128, "%d-%m-%Y %X", &timeinfo);
return string(buf);
}
...
To wyjście kompilatora:
error: 'localtime_r' was not declared in this scope
Czy wsparcie MinGW localtime_r
?
Jeśli nie, istnieje alternatywa bezpieczna dla wątków? (z wyłączeniem boost/QT/etc, których nie mogę użyć).
EDIT: to <time.h>
dostarczone przez mojego instalacji MinGW: http://pastebin.com/0CYBfMzg
Co oznacza "' localtime_s' nie mogą być stosowane na zewnątrz Microsoft rzeczy" oznacza? MinGW celuje w msvcrt.dll, a msvcrt.dll definiuje 'localtime_s' (jest wyeksportowany jako' _localtime32_s' i '_localtime64_s', odpowiednio dla 32-bitowych i 64-bitowych' time_t'). Jeśli nie zostanie zadeklarowany przez nagłówki biblioteki MinGW, zadeklaruj go sam i wywołaj. Zobacz nagłówki bibliotek Visual C++ dla ich deklaracji. –
@JamesMcNellis Wiele źródeł mówi, że mogą być używane tylko z kompilatorem microsoft. Próbowałem już (w tym '') i kompilując za pomocą g ++ otrzymuję komunikat 'error: 'localtime_s' nie został zadeklarowany w tym zakresie'. Zobacz na przykład: http://stackoverflow.com/questions/17085603/time-functions-in-mingw/17088374#17088374 –
eang
Nie wiem, co to są te "wiele źródeł", ale są one złe. Nie jest to zadeklarowane przez '', jest zadeklarowane przez '' w (starym) pakiecie Visual C++ SDK. Jeśli nie jest to zadeklarowane przez twoją kopię "pliku " MinGW, musisz to zadeklarować samodzielnie. –