Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задержка программы... как реализовать... 
:(
    Опции темы
Sfate
  Дата 17.10.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

Репутация: нет
Всего: нет



всем доброй ночи... вопрос таков... как реализовать задержку программы?...  юзал Thread.Sleep(sleep_Time); но мне необходимо запустить на время задержки таймер... если его поставить до слипа, то он тупо простаивает... а после смысла ставить нет... нид хелп.... smile 

Это сообщение отредактировал(а) Sfate - 17.10.2009, 22:33
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Экскалупатор
Дата 17.10.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



очевидно их нужно разделить на два потока, запускаешь свой таймер в отдельном потоке и основной поток переводишь в Sleep. потом, когда придет время, второй поток должен "разбудить" первый.
p.s. а для чего если не секрет такие сложности? запускать таймер по засыпанию основного потока. как то не понятно.
PM MAIL ICQ   Вверх
Sfate
Дата 17.10.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

Репутация: нет
Всего: нет



Цитата(Экскалупатор @  17.10.2009,  23:27 Найти цитируемый пост)
очевидно их нужно разделить на два потока, запускаешь свой таймер в отдельном потоке и основной поток переводишь в Sleep. потом, когда придет время, второй поток должен "разбудить" первый.

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

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

та не секрет smile у меня должно выполняется подключение лок сети, и вывод юзверю всяких умных фраз, типа "соединение с сервером" и т.п... после подкл поставил слип... а дальше хотел поставить таймер и по тику перечислять уже записанные фразы smile вот где то так...

--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Экскалупатор
Дата 18.10.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



про потоки это тут. но мне кажется что можно сделать проще, просто задача до конца не понятна(мне))). а зачем глушить основной поток? запускай в нем таймер и все.
PM MAIL ICQ   Вверх
KuMa1104
Дата 18.10.2009, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



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

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

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

while(Is_Stop)
{

}



Is_Stop сделай неизменяемым атомарным типом значения, тогда не надо будет париться с синхронизацией.
Поток правда будет всё время подгружен, но думаю ты это сильно не ощутиш))))


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Экскалупатор
Дата 18.10.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



 smile 
Цитата

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

 smile --- это не я.
я не страшный, и не претендую на абсолютность мнения...
PM MAIL ICQ   Вверх
KuMa1104
Дата 18.10.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



It was the joke smile 


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Sfate
Дата 18.10.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

Репутация: нет
Всего: нет



KuMa1104, боюсь как бы не вышел подгруз системы... с while наверно не выйдет...

Экскалупатор, ну как еще обьяснить не знаю... даж...
просто нужно чтобы форма показывалась и ,к примеру, показывалась анимация пока идет подкление, но еще нужно чтобы следующее действие выполнилось только после выполнения подключения... поэтому поставил слип...
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Экскалупатор
Дата 18.10.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Sfate, ну в принципе вроде все понятно. можно сделать через BackGroundWorker, по сути это тот же отдельный поток. в основном потоке создавай этот класс, потом запускай его и показывай в нем пользователю анимацию, а в основном потоке выполняй соединение, как только соединение установиться тогда убивай BackGroundWorker, и продолжай работу в основном потоке.
PM MAIL ICQ   Вверх
Sfate
Дата 18.10.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

Репутация: нет
Всего: нет



Экскалупатор, ок... вечерком попробую... отпишу... спс;)
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
IGV
Дата 18.10.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 1.4.2008

Репутация: 1
Всего: 2



попробуйте использовать backgroundworker как сказал, товарищч Экскалупатор, а для двух операций, каждая из которых будет выполняться в отдельном потоке используйте оператор lock.
Т.е. через backgroundWorker1.RunWorkerAsync() вы запускаете свои операции. Они запустятся в отдельном потоке, поэтому на форме в это время вы можете отображать всё, что хотите. 
Далее запускаете в первом потоке операцию подключения и в ней блокируете какой-либо объект через lock, конечно лучше всего сам connection. А в другом потоке совершенно спокойно обращаетесь к этому connection'у (он будет ожидать пока этот объект не будет разблокирован в первом потоке).
Вот и всё.
Подробнее прочитайте здесь
PM MAIL ICQ   Вверх
KuMa1104
Дата 18.10.2009, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Sfate это просто для справки)
У каждого потока есть своё процессорное время.
Поэтому поток вызванный в главном при нормальных условиях не заставит подвиснуть главный поток.

Код

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

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


Добавлено через 2 минуты и 3 секунды
Просьба не ругать, если написал что то не точно.


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1196 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.