2014-01-29 2 views
0

Я пишу приложение на основе FLTK GUI - RAM Machine.C++ FLTK 1.3.2: обновленный экран, обработка событий и неблокирующий сон

Я бы хотел, чтобы мой метод спал, скажем, через 1 секунду после каждого выполненного заказа, поддерживать экран в актуальном состоянии и доступным, а не блокировать обработку событий и т. Д. Одновременно. И проблема в том, что каждая функция, которую я использую, используется для случайного времени.

Например:

void FlowControl::_runProgram (void) { 

//Inside a loop: 

    _step(); //execute next order 
    clock_t start = timer.start(); //initialize clock 
    do{ 
     //wait max. 1-passed_time() [seconds] until 'something happens' 
     Fl::wait(1-timer.passed_time()); 

    }while (timer.passed_time() < 1); // check if 1 second has passed 

    //... 
} 

Результат: GUI не блокирует, все работает, но я должен ждать между 0 и даже 6 (!!) секунды вместо ровно один второй для следующего шага.

Что я уже пробовал: Fl :: wait()/Fl :: check()/Fl :: ready() + Sleep()/SetTimer()/clock_t/time_t с или без многопоточности.

Как решить эту проблему?

FLTK документ: http://www.fltk.org/doc-1.3/index.html

ответ

1

Самый простой способ, что я могу думать о том, чтобы использовать Fl::add_timeout() и Fl::repeat_timeout() функции. Посмотрите пример, как Грег Эрколано делает это в этой маленькой демонстрационной версии: http://seriss.com/people/erco/fltk/#AnimateDrawing