2014-10-14 4 views
1

Я внедрил вычисление в свой код, в котором компьютер добавляет все числа между 0 и 999999999 вместе и выводит ответ. Этот процесс занимает несколько секунд между нажатием кнопки и отображением ответа на экране. Теперь я хочу иметь секундомер или таймер на месте, что, когда я нажимаю кнопку, она начинается и останавливается всякий раз, когда появляется ответ на экране и говорит мне, сколько времени прошло. Ниже приведено то, что я реализовал, но меня поразили «00:00:00». Я ошибаюсь, полагая, что с этим его просто начать на кнопке нажать и после остановки цикла и отображения времени?Время секундомера всегда нулевое

if (GUI.Button(new Rect(100, 275, 300, 25), "Add All numbers between 1 and 999999999")) 
     { 
      AddAllNumbersMax(); 
      stopWatch.Start(); 
     } 

    } 
    GUI.TextArea(new Rect(275, 100, 300, 300), _messageLog); 
} 

void AddAllNumbersMax() 
{ 
    int max = 999999999; 
    double result = 0; 
    for (int i = 0; i<=max; i++) 
    { 
     result += i; 

    } 
    _messageLog += result + "\n"; 
    stopWatch.Stop(); 
    _messageLog += stopWatch.Elapsed; 

} 

UPDATE **

Спасибо за быстрые ответы, я вижу, где я не заладилось сейчас К сожалению, с такой низкой репутацией я не могу upvote ваших ответов :(но спасибо в любом случае! Раннее утро виновато!

+0

Подумайте о * когда * вы начинаете секундомер по отношению к расчету ... –

+0

Вы называете AddAllNumbersMax(), который останавливает секундомер, ТОГДА запустить секундомер. –

ответ

1

Вы остановки секундомера, прежде чем начать его

попробовать:

if (GUI.Button(new Rect(100, 275, 300, 25), "Add All numbers between 1 and 999999999")) 
     { 
      stopWatch.Start(); 
      AddAllNumbersMax(); 

     } 

    GUI.TextArea(new Rect(275, 100, 300, 300), _messageLog); 
} 

void AddAllNumbersMax() 
{ 
    int max = 999999999; 
    double result = 0; 
    for (int i = 0; i<=max; i++) 
    { 
     result += i; 

    } 
    _messageLog += result + "\n"; 
    stopWatch.Stop(); 
    _messageLog += stopWatch.Elapsed; 

} 
+0

Спасибо за быстрый ответ! Имеет смысл :) – CH99

1
AddAllNumbersMax(); 
stopWatch.Start(); 

Это первого выполнить AddAllNumbersMax -Какие по очереди вызывает stopWatch.Stop() и читает истекшее TIME- и только тогда он начнет время.

Если вы собираетесь измерять время AddAllNumbersMax принимает, это, вероятно, хорошая идея, чтобы начать секундомер там тоже. Или переместить весь секундомер бизнес из метода и Положите его на звонок.

+0

Такая глупая ошибка, спасибо! – CH99

3

Если я вас правильно понял, вы хотите измерить время выполнения AddAllNumbersMax(), в этом случае вы должны начать секундомер перед вызовом метода, и остановить его впоследствии:

if (GUI.Button(new Rect(100, 275, 300, 25), "Add All numbers between 1 and 999999999")) 
{ 
    stopWatch.Start(); 
    AddAllNumbersMax(); 
    stopWatch.Stop(); 
    // Do something with elapsed time 
}  
1

это очевидно, так как программа первый собирается выполнить свой AddAllNumbersMax(), и когда эта операция закончится они приложение будет начать таймер. вы должны сделать это следующим образом:

stopWatch.Start(); 
AddAllNumbersMax(); 
stopWatch.Stop(); 
Смежные вопросы