Задержка программы...

 
0
 
.NET
ava
Sfate | 17.10.2009, 23:32
всем доброй ночи... вопрос таков... как реализовать задержку программы?... юзал Thread.Sleep(sleep_Time); но мне необходимо запустить на время задержки таймер... если его поставить до слипа, то он тупо простаивает... а после смысла ставить нет... нид хелп.... smile
Ответы (11)
ava
Экскалупатор | 17.10.2009, 23:27 #
очевидно их нужно разделить на два потока, запускаешь свой таймер в отдельном потоке и основной поток переводишь в Sleep. потом, когда придет время, второй поток должен "разбудить" первый.
p.s. а для чего если не секрет такие сложности? запускать таймер по засыпанию основного потока. как то не понятно.
ava
Sfate | 17.10.2009, 23:43 #
Цитата (Экскалупатор @ 17.10.2009, 23:27 findReferencedText)
очевидно их нужно разделить на два потока, запускаешь свой таймер в отдельном потоке и основной поток переводишь в Sleep. потом, когда придет время, второй поток должен "разбудить" первый.

а можно слегка пояснить, точнее smile ...

Цитата (Экскалупатор @ 17.10.2009, 23:27 findReferencedText)
p.s. а для чего если не секрет такие сложности? запускать таймер по засыпанию основного потока. как то не понятно.

та не секрет smile у меня должно выполняется подключение лок сети, и вывод юзверю всяких умных фраз, типа "соединение с сервером" и т.п... после подкл поставил слип... а дальше хотел поставить таймер и по тику перечислять уже записанные фразы smile вот где то так...
ava
Экскалупатор | 18.10.2009, 00:32 #
про потоки это тут. но мне кажется что можно сделать проще, просто задача до конца не понятна(мне))). а зачем глушить основной поток? запускай в нем таймер и все.
ava
KuMa1104 | 18.10.2009, 09:46 #
Вообщето по моему то что говорит Экскалупатор это правильнее.
Честно говоря я побаиваюсь ему перечить smile

Но если твоей дуще так хочеться а телу лень код переписывать, то сделай что то вроде.
Бесконечного цикла с проверкой условия, в отдельном потоке.

Timer.Start(); // твой таймер работает, и событие которое ты к нему подвязал переодически
//происходит в нём Console.Write("...") например

while(Is_Stop)
{

}



Is_Stop сделай неизменяемым атомарным типом значения, тогда не надо будет париться с синхронизацией.
Поток правда будет всё время подгружен, но думаю ты это сильно не ощутиш))))
ava
Экскалупатор | 18.10.2009, 10:25 #
smile
Цитата


Вообщето по моему то что говорит Экскалупатор это правильнее.

Честно говоря я побаиваюсь ему перечить smile


smile --- это не я.
я не страшный, и не претендую на абсолютность мнения...
ava
KuMa1104 | 18.10.2009, 14:57 #
It was the joke smile
ava
Sfate | 18.10.2009, 15:47 #
KuMa1104, боюсь как бы не вышел подгруз системы... с while наверно не выйдет...

Экскалупатор, ну как еще обьяснить не знаю... даж...
просто нужно чтобы форма показывалась и ,к примеру, показывалась анимация пока идет подкление, но еще нужно чтобы следующее действие выполнилось только после выполнения подключения... поэтому поставил слип...
ava
Экскалупатор | 18.10.2009, 16:46 #
Sfate, ну в принципе вроде все понятно. можно сделать через BackGroundWorker, по сути это тот же отдельный поток. в основном потоке создавай этот класс, потом запускай его и показывай в нем пользователю анимацию, а в основном потоке выполняй соединение, как только соединение установиться тогда убивай BackGroundWorker, и продолжай работу в основном потоке.
ava
Sfate | 18.10.2009, 17:04 #
Экскалупатор, ок... вечерком попробую... отпишу... спс;)
ava
IGV | 18.10.2009, 17:07 #
попробуйте использовать backgroundworker как сказал, товарищч Экскалупатор, а для двух операций, каждая из которых будет выполняться в отдельном потоке используйте оператор lock.
Т.е. через backgroundWorker1.RunWorkerAsync() вы запускаете свои операции. Они запустятся в отдельном потоке, поэтому на форме в это время вы можете отображать всё, что хотите.
Далее запускаете в первом потоке операцию подключения и в ней блокируете какой-либо объект через lock, конечно лучше всего сам connection. А в другом потоке совершенно спокойно обращаетесь к этому connection'у (он будет ожидать пока этот объект не будет разблокирован в первом потоке).
Вот и всё.
Подробнее прочитайте здесь
ava
KuMa1104 | 18.10.2009, 19:41 #
Sfate это просто для справки)
У каждого потока есть своё процессорное время.
Поэтому поток вызванный в главном при нормальных условиях не заставит подвиснуть главный поток.


Timer.Start(); // твой таймер работает, и событие которое ты к нему подвязал переодически
//происходит в нём Console.Write("...") например

while(Is_Stop)
{
System.Threading.Thread.Sleep(50);// или System.Threading.Thread.Sleep(0); тогда он просто
//снова встаёт в очередь
}


Добавлено позднее:
Просьба не ругать, если написал что то не точно.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить