Нужен таймер
От: omninamed Украина  
Дата: 12.02.13 13:11
Оценка: -1
Нужен таймер, точно синхронизированный с системным временем.
Ровно в полночь должен реинициализироваться генератор псевдослучайных чисел.

void CALLBACK RandomSeedCountdown ( UINT uTimerID, UINT, DWORD_PTR dwUser, DWORD_PTR, DWORD_PTR )
{
    CMainDialog* pDlg = ( CMainDialog* ) dwUser;

    SYSTEMTIME sysTime;
    ::GetLocalTime ( &sysTime );
    sysTime.wSecond = 60 - sysTime.wSecond;
    sysTime.wMinute = 60 - sysTime.wMinute;
    sysTime.wHour = 23 - sysTime.wHour;

    if ( pDlg && pDlg->GetSafeHwnd ( ) )
    {
        COleDateTime dt ( sysTime );
        pDlg->SetDlgItemText ( IDC_RANDOM_SEED_COUNTDOWN, dt.Format ( L"До реинициализации ГПЧ осталось: %H:%M:%S" ) );
    };

    if ( sysTime.wSecond == 0 && sysTime.wMinute == 0 && sysTime.wHour == 0 )
        g_theSharp.SeedRandom ( );
};

BOOL CMainDialog::OnInitDialog ( void )
{
    timeSetEvent ( 10, 0, RandomSeedCountdown, ( DWORD_PTR ) this, TIME_PERIODIC );
...


Открывая окно системных часов и свою программу заметна сильная разница в тиках секунд.
Изменение периодичности и точности таймера не дают результатов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.