Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Опрос консоли в ходе выполнения процедуры Добавлено: 07.04.09 22:08  

Автор вопроса:  Diavolo
Добрый вечер всем. Прошу прощения, если вопрос подымался или эт слишком просто (не нашел, ткните, плиз, носом).
Так вот, вопрос в следующем. Имеется некое консольное приложение. В этом приложении есть несколько процедур, которые в различных ситуациях начинают свою работу (естественно, поочередно), и могут ее выполнять очень долго. Нужна возможность по команде из консоли, чтобы эти процедуры прерывались, т.е. в ходе процедурки чтобы была проверка консоли, и если она пустая, то процедурка бы работала дальше себе, если нет - обработала содержимое и приняла решение о работе. Console.Read предполагает нажатие Enter, на время выполнения команды - следующая команда не выполняется. А как это обойти, или чем считывать с консоли? Интересует как это сделать на VB или C#. Заранее сенкс

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 07.04.09 23:04
Свои длительные задачи запускай в отдельных потоках.
Далее по командам из консоли можешь убивать потоки, или же устанавливать глобальные флаги, по которым потоки сами будут завершать свою работу.

Ответить

Номер ответа: 2
Автор ответа:
 Diavolo



Вопросов: 6
Ответов: 46
 Профиль | | #2 Добавлено: 07.04.09 23:18
Steel Brand пишет:
Свои длительные задачи запускай в отдельных потоках.

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

Ответить

Номер ответа: 3
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #3
Добавлено: 07.04.09 23:32
эээ... вы хотите в одном потоке и выполнять действия и считывать команды... может еще видео будите там же воспроизводить и игрушку подпишите туда же... так между строк :)
ПОТОКИ, ПОТОКИ И НИЧЕГО КРОМЕ ПОТОКОВ!

Ответить

Номер ответа: 4
Автор ответа:
 Diavolo



Вопросов: 6
Ответов: 46
 Профиль | | #4 Добавлено: 07.04.09 23:40
Я тут немного доформулировать решил... Вообще приложением будет управлять другая прога, которая будет передавать ей команды когда ей вздумается... может это меняет дело, а может и нет (ну не сталкивался я с таким). И я прекрасно из своего консольного приложения получаю команды, когда знаю, что они будут, но вот как сделать, чтоб эти команды "дошли", если она пошлет их во время выполнения какой-то процедуры и вообще без выполнения команд, требующих какой-то инфы (ну ReadKey ведь без нажатия клавиши не передает управление дальше)... сорри, если туплю - забодался и не спал давно ))), а сделать нада

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 08.04.09 04:02
Diavolo пишет:
Ну вообще это в проекте, т.к. в будущем нужно будет поддерживать многоядерность, но это отдельная тема... по идее ведь можно и как-то по-иному? На данный момент интересует способ без организации потоков...


Многоядерность здесь не при чем. Многопопточность работает и на одноядерных процессорах.

Diavolo пишет:
Я тут немного доформулировать решил... Вообще приложением будет управлять другая прога, которая будет передавать ей команды когда ей вздумается... может это меняет дело, а может и нет (ну не сталкивался я с таким). И я прекрасно из своего консольного приложения получаю команды, когда знаю, что они будут, но вот как сделать, чтоб эти команды "дошли", если она пошлет их во время выполнения какой-то процедуры и вообще без выполнения команд, требующих какой-то инфы (ну ReadKey ведь без нажатия клавиши не передает управление дальше)... сорри, если туплю - забодался и не спал давно ))), а сделать нада

Без потока ты ничего не сделаешь. По простой причине которую ты сам назвал - Read/ReadLine/ReadKey блокируют выполнения потока до тех пор как не произойдет действие которое ты ожидаешь.

Тебе нужно запустить твою рабочую процедуру в отдельном потоке. А в основном потоке ожидать команд из консоли. Это совсем не сложно, буквально десяток строк кода.

Ответить

Номер ответа: 6
Автор ответа:
 Diavolo



Вопросов: 6
Ответов: 46
 Профиль | | #6 Добавлено: 08.04.09 08:00
Steel Brand пишет:
Многоядерность здесь не при чем. Многопопточность работает и на одноядерных процессорах.

Я эт понимаю - я просто к тому, что с потоками, процессами и т.п. планировалось повозиться позже )

Ответить

Номер ответа: 7
Автор ответа:
 Diavolo



Вопросов: 6
Ответов: 46
 Профиль | | #7 Добавлено: 08.04.09 08:01
Steel Brand
В общем, понял - спасибо! ;)

Ответить

Номер ответа: 8
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #8 Добавлено: 11.04.09 01:11
__Pavel__, прогрес, начинаешь умные вещи говорить?

Ответить

Номер ответа: 9
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #9
Добавлено: 11.04.09 04:06
Steel Brand, прогресс, начинаешь других хвалить?

Ответить

Номер ответа: 10
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #10
Добавлено: 11.04.09 14:50
Steel Brand, прогресс, начинаешь других хвалить?

+1000... наверное зарплату повысили :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам