Есть ли шаблон дизайна для задержки метода обновления? - PullRequest
0 голосов
/ 12 мая 2019

Функция Render требует многократного выполнения, прежде чем ее вызовут только один раз (она используется для сбора входных данных). Я мог бы принудительно вызывать функцию Render каждый раз, и это не будет нарушать код, но в конечном итоге это будет очень медленно.

Задержанное обновление вызывается много раз за пределами холста (не всегда), время или последовательность этих вызовов не могут быть известны.

Предполагается, что я не могу контролировать скорость кадров для функции OnFrame.

Есть ли лучший способ, без , использующий таймеры или события, перекрасить мой холст после завершения сбора данных?

Вот что я получил до сих пор:

    // called in many places 
    canvas.InputData( x );

    // ---------------------- Canvas class ------------------- 

    data = new Dictionary();

    InputData( key, x )
    {
        data[ key ] = x;

        Delayed_Render();
    }

    _counter = 0;
    _request = false;
    _delayed = false;
    _complete = false;

    Delayed_Render()
    {
        if( _request || ! _complete ) return;

        _request = true;
        _complete = false;
    }

    override OnFrame()
    {
        if( ++ _counter < 10 ) return;

        _counter = 0;

        if( _request ) 
        {
            _request = false;
            _delayed = true;

            Render();
        }
    }

    override OnResize()
    {
        Render();
    }

    Render()
    {
        // ....................................
        // code to render canvas using the data  
        // ....................................

        if( _delayed ) 
        {
            _complete = true;
            _delayed = false;
        }
    }
...