- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
/// <summary>
/// Стартовый метод потока, который отображает процесс вычисления.
/// </summary>
public static void LoadingThread()
{
int curLoadingStep = 0;
while(!bStop)
{
Console.Clear();
switch(curLoadingStep)
{
case 0:
Console.WriteLine("Производится вычисление");
curLoadingStep = 1;
break;
case 1:
Console.WriteLine("Производится вычисление.");
curLoadingStep = 2;
break;
case 2:
Console.WriteLine("Производится вычисление..");
curLoadingStep = 3;
break;
case 3:
Console.WriteLine("Производится вычисление...");
curLoadingStep = 0;
break;
}
Thread.Sleep(800);
}
}
Наткнулся на форуме.
Чего то в этой жизни я явно не понимаю
kegdan 22.08.2013 18:52 # −1
Belorus 22.08.2013 20:39 # +2
kegdan 23.08.2013 03:15 # +1
Belorus 23.08.2013 09:43 # 0
bormand 23.08.2013 09:56 # +1
P.S. И кстати, есть ли смысл оптимизировать усложнять херню, которая вполне читабельна и никак не сказывается на производительности? :)
P.P.S. Если бы я что-то и переделывал - то я бы попробовал выводить проценты выполнения, а не точки. Если их конечно можно вытрясти у расчетного потока. С процентами ждать намного приятней.
kegdan 23.08.2013 10:19 # 0
Тут уже не параллельный поток ожидания ставить, а подписываться на Event. Вообще сама идея отображения точек во время ожидания через вбитый тайминг глупа и безобразна.
bormand 23.08.2013 12:08 # +1
Ну вот это вариант, кстати. Чтобы вычислительный поток сам эти проценты и выводил, с развязкой расчетов и вывода через ивент.
> Вообще сама идея отображения точек во время ожидания через вбитый тайминг глупа и безобразна.
Если вычислительный поток занят расчетами, и у него нет никаких средств информирования о прогрессе (например ивентов), а перепиливать его нельзя, то что еще можно сделать? Только точками в соседнем треде и срать ;)
kegdan 23.08.2013 12:34 # 0
Нужно информировать юзера
Belorus 23.08.2013 11:26 # 0
bormand 23.08.2013 12:15 # +1
> Если вы не понимаете семантической разницы - то я не могу представить как вы пишете абстракции.
Абстракция: "Класс WaitIndicator, при вызове start() начинающий выводить точки каждые 700мс, и прекращающий это делать по вызову какого-нибудь stop(). Точки должны выводиться даже если главный поток занят работой". Ваша реализация - запускаем тред, в нем запускаем таймер, по тику таймера выводим точку. Приведенная выше реализация - запускаем тред, спим Nмс, выводим точку. Реализации разные, абстракция одна, что с ней не так? :) Но реализация с Thread.Sleep короче и проще. Что в ней несемантичного?
Если вы имели в виду какую-то другую реализацию, или вам не нравится приведенная мной абстракция - прошу привести ваш вариант, а не переходить на личности.
bormand 23.08.2013 12:51 # 0
А проблема тут не в том, что я не умею писать абстракции, а всего лишь в том, что я на шарпе никогда не писал, и не знаю его либ ;(
govnomonad 22.08.2013 20:00 # +1
kegdan 22.08.2013 20:01 # +1
Lure Of Chaos 22.08.2013 20:15 # 0
myaut 22.08.2013 20:16 # 0
WGH 23.08.2013 04:17 # 0
akaDElpher 02.09.2013 15:24 # 0
public class Progress<T> : IProgress<T>
{
public Progress();
public Progress(Action<T> handler);
protected virtual void OnReport(T value);
public event EventHandler<T> ProgressChanged;
}
Но я сначала всё не так понял, они просто ждут, когда всё закончится.