|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.09.2015, 16:33 | #1 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Есть ли в смысл заменять процедуру Sleep() на некую самописную функцию Sleeping()?
В delphi имеется функция sleep()
Ее вызов заставляет программу не просто ожидать выполнение кода, а фактически программа ведет себя как "зависшая", и не позволят в это время сделать ничего. А что если сделать такую функцию?: Код:
В чем + и - обоих методов? Интересует поведение с интервалами от 100 миллисекунд до десятков. Хотя так не получится . чтобы sleeping работала как функция , так как для каждого вызова различный код должен быть в таймере ( Последний раз редактировалось Illusiony; 07.09.2015 в 16:54. |
07.09.2015, 17:18 | #2 |
Участник клуба
Регистрация: 09.11.2007
Сообщений: 1,761
|
А что именно Вам нужно? Для параллельности есть потоки.
|
07.09.2015, 17:20 | #3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
первое. если Вам в коде нужно "заморозить" выполнение на какое-то время, то, скорее всего, Вы выбрали неверную реализацию и нужно просто переписать логику работу, используя таймер. Это нормальное решение проблемы.
Но, есть и ненормальное. Вполне можно сделать паузу в выполнении программы, но при этом программа будет вести себя не как зависшая, а просто как программа (правда, ресурсы процессора оба будет "кушать" немилосердно). для этого нужно просто выполнять цикл, столько, сколько нужно, но в цикле делать Application.ProcessMessages. ну, например, где-то в коде стоит Sleep(5000); пишем вместо этого такой цикл: Код:
вот и всё! да, с этим полностью согласен! |
07.09.2015, 18:36 | #4 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Да я использую таймеры чтобы выполнялись другие действия пока задержано данное действие.
Я просто сперва подумал что можно сделать функцию вместо sleep впихнуть туда только 1 таймер и использовать его несколько раз где нужно использовать задержку. Но позже осознал что так не получится. А с потоками, это еще больший гемор наверное переписывать то что уже есть. И так уже почти 4к строк моего "быдлокода". Довольно трудно уже разбираться. Код:
Т.е. тут получается каждые 100 миллисекунд будет отдаваться некоторое время на другие действия в программе? |
07.09.2015, 18:46 | #5 |
Участник клуба
Регистрация: 09.11.2007
Сообщений: 1,761
|
|
07.09.2015, 19:25 | #6 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
и ДА, и НЕТ.
ДА потому-что в Application.ProcessMessage ВОЗМОЖЕН (но не гарантирован) приход сообщения от таймера. И соответственно будет передано управление на соответствующий OnTimer НЕТ возврат из OnTimer только по завершению этой процедуры. (что может составить гораздо больший интервал чем 100мс). и после возврата программа (ВСЯ!!!) будет спать еще 100 мс. (sllep(100);
программа — запись алгоритма на языке понятном транслятору
|
07.09.2015, 19:57 | #7 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Например, мне нужно задержать выполнение основного кода на 5 секунд и параллельно выводить секундные часики.
Иначе часики опоздают на 5 секунд и все это время не будут отображаться тикание. На самом деле все сложнее, это гипотетический пример. Последний раз редактировалось Illusiony; 07.09.2015 в 19:59. |
07.09.2015, 20:57 | #8 |
Участник клуба
Регистрация: 09.11.2007
Сообщений: 1,761
|
Ну так кидай свой код в отдельный поток, где и вызывай для него Sleep(5000), при этом твои часики в основном потоке будут нормально ходить.
|
07.09.2015, 22:19 | #9 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
|
07.09.2015, 22:38 | #10 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Есть ли смысл кешировать в оперативке | Illusiony | PHP | 3 | 02.03.2015 18:10 |
Есть ли в этом смысл? | raytek | Microsoft Office Access | 21 | 05.04.2013 19:22 |
есть ли смысл изучать | visual user | Microsoft Office Excel | 5 | 12.06.2012 10:57 |
Российская ОС. Есть ли смысл? | mrChester | Свободное общение | 39 | 30.07.2010 17:25 |