Windows XP'yi hedefliyorum ve taşma yapmayan GetTickCount64'e benzer bir işleve ihtiyacım var.İş parçacığı güvenli Windows XP için GetTickCount64 uygulaması
Doğru ve iplik güvenli, iyi bir çözüm bulamadım, bu yüzden kendi kendime rulo çalıştı. Gerçekten parçacığı güvenli mi
ULONGLONG MyGetTickCount64(void)
{
static volatile DWORD dwHigh = 0;
static volatile DWORD dwLastLow = 0;
DWORD dwTickCount;
dwTickCount = GetTickCount();
if(dwTickCount < (DWORD)InterlockedExchange(&dwLastLow, dwTickCount))
{
InterlockedIncrement(&dwHigh);
}
return (ULONGLONG)dwTickCount | (ULONGLONG)dwHigh << 32;
}
:
Burada ile geldi ne?
İplik emniyeti doğruluğunu kontrol etmek zordur, bu yüzden her durumda gerçekten doğru olup olmadığından emin değilim.
Windows'ta
Hayır, bu evreli değil. –
Bu doğru değil. 'InterlockedIncrement' aramanız en iyi ihtimalle bir tahmindir. Ayrıca, başka bir şey ifade etmek için 'volatile' kullanıyor görünüyorsunuz: [volatile vs. volatile] (http://www.drdobbs.com/parallel/volatile-vs-volatile/212701484). – IInspectable
Yorumlarınız için teşekkür ederiz. Sanırım kilitlenmeyen programlama hakkında bir iki şey öğrenemedim. Peki, ben denedim :) Aslında, benim sorunumu başka bir şekilde çözdüm ... Hiçbir şey yapmadan :) İki GetTickCount sonucu arasındaki fark hesaplanırken, 49 günlük taşma sonuçları gerçekten bozmaz gibi görünüyor. (zaman farkı büyük değilse). http://stackoverflow.com/a/3692425/2604492 – Paul