Stopwatch.GetTimeStamp вызывает ошибку stackoverflow? - PullRequest
0 голосов
/ 10 февраля 2011

Если я прав, я должен определенно не получать ошибку переполнения стека при использовании Stopwatch.GetTimeStamp, особенно только после запуска моей программы.

Вот мой код:

if (currentTicks >= lastTicks + interval)
        {
            lastTicks = currentTicks;
            return true;
        }

currentTicks помещаются в Stopwatch.GetTimeStamp (). Этот фрагмент кода находится в методе, который называется бесконечно (я использую его для управления FPS). У кого-нибудь есть идеи?

EDIT: Основной код формы:

    Game game;

    public Form1()
    {
        InitializeComponent();
        game = new Game(Stopwatch.Frequency / 45);
        MainLoop();
    }

    public void MainLoop()
    {
        if (game.DrawStuff(Stopwatch.GetTimestamp()))
        {
            Invalidate();
        }

        MainLoop();
    }`

Затем класс игры:

    public long lastTicks { get; set; }

    public double interval { get; set; }

    public Game(double Interval)
    {
        interval = Interval;
    }

    public bool DrawStuff(long currentTicks)
    {
        if (currentTicks >= lastTicks + interval)
        {
            lastTicks = currentTicks;
            return true;
        }

        else
        {
            return false;
        }
    }

Останавливается на "if (currentTicks> = lastTicks + interval)". Я вижу, что значение currentTicks равно 30025317628568. Все остальное не может быть оценено.

Ответы [ 2 ]

4 голосов
/ 11 февраля 2011

Вы вызываете MainLoop рекурсивно (он же бесконечная рекурсия ), что означает, что вы переполняете стек вызовов .GetTimeStamp - это красная сельдь.

Удалите вызов MainLoop из себя и просто используйте стандартный цикл while:

while (game.DrawStuff(Stopwatch.GetTimestamp()))
{
    Invalidate();
}
3 голосов
/ 10 февраля 2011

Я предполагаю, что опубликованный код является частью метода получения свойства, называемого currentTicks, lastTicks или даже interval.

Итак, вопрос заключается в том, чтобы использовать правильные Caps для свойств.

...