С#, System.Console
на вопрос в таком тоне хочется и ответить соответствующе...
Извини, просто я часа три ебался, и если бы мне кто-нибудь предложил взять стрим из Console.In я бы мог просто не сдержаться
А чем не подходит еще один тред? Или я не догоняю?
гм... писать на manager c++ и юзать обычную консоль?..
Фишка в том, что всякие разные Thread.Abort кидают ThreadAbortException в тот тред, который надо прекратить, но если он в этот момент находится в Console.ReadLine, то пока юзер не нажмёт ентер, этот эксепшен наружу не вылезет, и тред, соответствено не убьется. Очень забавно выглядит. Вот, поэтому надо тогда считывающий тред делать как раз основным, а считать и статистику выводить в другом. Но тогда это всё будет страшно некрасиво выглядеть, хотя по ходу именно так и придётся сделать, если я эту хрень не побежу. Или вторую консоль открыть =)
Хотелось бы чтобы выглядело это так: прога считает, рисует разные точечки етс., тут юзер жмёт какую-нить кнопку, поскольку прога ничего не вводит, кнопка так и остаётся в буфере (и на экран не попадает но как только очередная итерация завершается, прога узнаёт что у неё keystroke pending, и вызывает наконец ReadLine.
Странно это всё, короче. Щаз попробую действительно вычисления в другой тред засунуть, может быть это будет не так ужасно...
Хотелось бы чтобы выглядело это так: прога считает, рисует разные точечки етс., тут юзер жмёт какую-нить кнопку, поскольку прога ничего не вводит, кнопка так и остаётся в буфере (и на экран не попадает но как только очередная итерация завершается, прога узнаёт что у неё keystroke pending, и вызывает наконец ReadLine.
Странно это всё, короче. Щаз попробую действительно вычисления в другой тред засунуть, может быть это будет не так ужасно...
Ни разу не пробовал манагед С++ и как-то не горю желанием. Кроме того, что-то я сомневаюсь, что там есть "обычная консоль" =)
а зачем тебе вообще консоль? 

Console.KeyAvailable
Console.ReadKey
Console.ReadKey
>Console.KeyAvailable
>Console.ReadKey
Это что?
Да, фреймворк 1.1, на всякий случай.
2Атилла - ну типа для моих текущих целей вполне подходит юникс-вей. Почти. Ну то есть понятно, что если проге скармливают данные из файла, то этот самый детект надо выключить. А когда за терминалом пользователь, хочется некоторой интерактивности.
Ой, маза, мб стоило попытаться ctrl-Break отловить?
Лана, вопрос закрыт, я уже вынес все вычисления в другой тред. Вроде работает.
>Console.ReadKey
Это что?
Да, фреймворк 1.1, на всякий случай.
2Атилла - ну типа для моих текущих целей вполне подходит юникс-вей. Почти. Ну то есть понятно, что если проге скармливают данные из файла, то этот самый детект надо выключить. А когда за терминалом пользователь, хочется некоторой интерактивности.
Ой, маза, мб стоило попытаться ctrl-Break отловить?
Лана, вопрос закрыт, я уже вынес все вычисления в другой тред. Вроде работает.
> Это что?
> Да, фреймворк 1.1, на всякий случай
оказалось, что это фреймоворк 2.0
> Да, фреймворк 1.1, на всякий случай
оказалось, что это фреймоворк 2.0
Ага. Ясно, буду знать, что где-то впереди есть светлое будущее, спасибо!
Короче! Я нашёл в примере на System.GC.KeepAlive установку хендлера на ctrl+Break. Очень мазёво получилось. Оказывается, у винды весьма пёздая консоль, очень много интересных функций кругом неё бродит. Например, можно мышиные мессаги ловить консолью - то есть они будут в каком-то формате слаться в тот же стдин, правда, его читать нужно какой-то специальной функцией, чтобы их не отфильтровало. Вот.
Ты хочешь сделать unix way?
Судя, по содержимому треда это не так просто сделать во враждебной среде.
Судя, по содержимому треда это не так просто сделать во враждебной среде.Оставить комментарий
bleyman
У меня вдруг возникло вполне простое и понятное желание - узнать, а не попытался ли юзер что-нить ввести. В консольном приложении. Ну то есть прога работает, работает, периодически завершает очередную итерацию, и, если юзер чё-нить нажал, то она могла бы не считать дальше, а поинтересоваться не нужно ли ему чего.Как?
Да, свои гениальные идеи (через треды, попиздить у консоли стрим и у него делать неблокирующее чтение) желательно вначале проверять а потом озвучивать.
Спасибо.