![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 05.02.2011
Сообщений: 35
|
![]()
Как правильно нужно использовать слип в потоке? После слипа, поток зависает либо уничтожается .. и дальнейшие действия никакие не выполняются.
И работает он как то не понятно. У меня на компе, при sleep(1000), все нормально, у друга, на более мощном компьютере после слипа поток перестает выполнятся.. Может его как то можно остановить на n-секунд, а потом продолжить выполнение в этом же месте? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
слип это и делает, но поток не должен быть уничтожен за это время.
и кстати, может у вас просто чтото не то с потоком(кодом) и за эту паузу чтото меняется что поток просто не может продолжить работу.(тут надо код смотреть, ибо я лично испоьзую слип если надо, и все норм) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 05.02.2011
Сообщений: 35
|
![]()
Ничего не происходит во врем слипа. Вся программа работает в одном потоке. Поставил лог, чтоб после каждой строчки кода, писал в мемо.
Form1.Memo1.Lines.Add('1'); sleep(1000); Form1.Memo1.Lines.Add('2'); В итоге у меня на компе все нормально. У друга появляется в логе только цифра 1. Но это застывание бывает не всегда. У него намного чаще. У меня реже. Может ли это как то зависеть от процессора? Или может нужно назначать какой нибудь самый высокий или наоборот, самый низкий приоритет потока, чтобы работал на каждом компьютере и нормально, а не через раз? Дело тут уже не в коде мне кажется. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 23.09.2009
Сообщений: 27
|
![]()
Зачем вам sleep? Возможно, есть альтернативное, более правильное решение.
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
у вас обращение к VCL-компонентам в коде потока?
если да, то полет нормальный. говорю же, надо код смотреть, за свои 6 лет, повидал такие чудеса... Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 05.02.2011
Сообщений: 35
|
![]()
Ну весь код кидать смысла нету. Вот код конкретно где он виснет, с аномалиями какими то))
while click=0 do begin Synchronize(MD); //Скрин с WebBrowser, и если там присутствует определенный пиксель, присваивает переменной MDProv значение 1, если нету то 0 Form1.Memo1.Lines.Add('1'); if MDProv=0 then break; //Если даже он прервет этот цикл, то код будет выполнятся дальше, и логи дальше должны идти count:= count+1; if count>10 then click:=1; //С этой строкой вообще как то аномально, если ее добавляю, то виснет на слипе, если убираю, то нормально все. Synchronize(Perezar); //Аналогично с MD MoveS1; //функция Synchronize(Use1); //Аналогично с MD sleep(1000); end; В логах через раз вижу только цифру 1 (Form1.Memo1.Lines.Add('1') ![]() |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 05.02.2011
Сообщений: 35
|
![]()
И еще есть такая особенность, что если он при первом запуске цикла не зависнет на слипе, то тогда все ок, и дальше все норм будет. А бывает что нажимаешь кнопку запуска и он раз 10 подряд виснет на слипе. Потом запустить и работает))
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Form1.Memo1.Lines.Add('1'); тоже нужно выполнять через Synchronize
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#9 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
помоему в потоке у вас потребность минимальная. Цитата:
что делает MoveS1? и так же, переменные точно инициализированны? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 05.02.2011
Сообщений: 35
|
![]()
В потоке большая необходимость. Скриншоты в браузере делаются каждый пол секунды, в циклах тоже много маленьких слипов. И есть клики в браузер. Без потока приложение зависает и не может кликнуть в браузер
Это этот цикл прерван, он выполняется в цикле for i=1 to 6. Даже если он прервется, то будут выполнятся условия дальше |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
функция Sleep() | ^Angel^ | Общие вопросы C/C++ | 9 | 07.05.2011 13:27 |
Как заменить sleep в потоке? чтобы получить задержку 5 мили | Dasverd2010 | Общие вопросы Delphi | 13 | 07.09.2010 14:29 |
Sleep(50); за 63 мс... или за 47... | Teksa | Общие вопросы C/C++ | 8 | 20.07.2010 08:34 |
Проблема с Sleep! | k1r1ch | Общие вопросы Delphi | 11 | 20.06.2009 19:12 |
Аналог Sleep() | Ants | Общие вопросы Delphi | 2 | 18.11.2008 13:11 |