![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
Товарищи, подскажите, как сделать задержку в потоке, я весь форум перерыл, подходящего ничего не нашел...
Сразу оговорюсь такой цикл мне не подходит....
Ttimer тоже не подходит, и sleep не подходит... В общем суть задачи состоит в том, что необходимо приостановить работу потока из самого потока на n секунд, при этом основное приложение должно нормально работать... (sleep был бы идеален если бы не тормозил всю программу...) В общем скажите кто, что знает... Добавлено @ 20:00 ага, так, sleep тормозит поток если у него нету синхронизации, а с синхронизацией как задержку поставить? --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 6 Всего: 50 |
NoliX
Если у тебя несколько потоков, то Sleep приостанавливает выполнение только того потока, в котором выполняется Sleep. Опиши понятнее, что ты хочешь сделать. Добавлено @ 20:10 PS. Не понял, зачем в WINAPI тему? -------------------- |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
упс, пардон, темой промахнулся....
Итак есть 2 формы, есть поток, поток вызывается с первой формы и выполняет действия с периодичность в несколько секунд, после того как поток закончил свое черное дело первая форма прячется и появляется вторая форма Тут 2 подводных камня: 1. Если вызвать поток без синхронизации, то вторая форма не открывается, пишет ошибку, что не верный дескриптор окна 2.Если использовать синхронизацию, то sleep находящийся в потоке подвешивает программу Вопрос: Что делать? --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
а почему бы не открывать вторую форму из потока?
+ стандартные методы извещения никто не отменял: после завершения работы потока шли главной форме сообщение, по которому она будет показывать вторую форму. можно еще и событие прикрутить ( но с сообщением будет по-проще ) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
ну вот и хочу открыть вторую форму из потока, а она не хочет открываться без синхронизации, а сообщения программе слать я не умею, можно пример?
Добавлено @ 20:43 мне нужно провести вот такие операции
первой формой является form4 второй form5 Добавлено @ 20:43 PS это не весь поток =) --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Демо |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 6 Всего: 50 |
Из дополнительного потока не создавай формы.
Метод может быть таким:
-------------------- |
||||
|
|||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
Демо, все бы хорошо, так я уже пробывал делать, но вот низадача, данные которые мне нужно передать являются локальми переменными процедуры, если выносить в отдельную процедуру вывод в форму2 то нужно это процеду с параметрами объявлять, а он отказывается синхронизировать такую процедуру или я туплю просто...
Добавлено @ 21:12 просто в этом случае приходится переменные глобализировать, а этого не хотелось бы, кстати понравилась идея с извещениями, но как ее реализовать? --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 6 Всего: 50 |
Какой процедуры? Где она выполняется? -------------------- |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
у меня поток отдельным юнитом создан, в этом потоке процедура поток.Execute, в ней все и происходит
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Демо |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 6 Всего: 50 |
Так процедура у тебя выполняется в потоке? Почему не используешь переменные потока? Вот как раз сейчас пишу для себя задачу, посмотри пример. Спецю для тебя добавил временно поле в поток - FTestCounter
Это сообщение отредактировал(а) Демо - 18.1.2006, 22:05 -------------------- |
||||||
|
|||||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
так щас посмотрю подходил ли мне такая штука, спасибо
в общем и целом содержимое потока (по порядку) Подсчет данных (создание массивов их заполнение вычисление чисел) Начало цикла всякие операции ЗАДЕРЖКА вывод информации на форму 2 (с использованием переменных потока) операции опять конец цикла вывод информации на форму 2 (с использованием переменных потока) --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 6 Всего: 50 |
вывод информации на форму 2 (с использованием переменных потока) - Synchronyze(Procedure1)
операции опять конец цикла вывод информации на форму 2 (с использованием переменных потока) - Synchronyze(Procedure2) или снова Synchronyze(Procedure1) -------------------- |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
на синхронизации зависает теперь и все хмм, буду думать дальше...
и все таки, можно програмно попросить из потока программу выполнить некоторые функции --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 6 Всего: 50 |
Из потока, как и из любой другой функции, можно вызвать на выполнение любую функцию или процедуру... -------------------- |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
да нет, я не об этом, я вот об этом
Это сообщение отредактировал(а) NoliX - 18.1.2006, 23:23 --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Елы-палы. Ну и развели димагогию. Поток останавливается методом Suspend. Обратно возобновляется методом Resume. Пример нужен?
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
Poseidon не пойдет мне suspend!
нужно остановить поток не из приложения, а приостановить его из самого себя в цикле, в нужном месте! --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
а откуда он будет возобновлятся?? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Тогда sleep, что тут думать. Если это не основной поток программы, то зависания не будет, но поток "уснет" на указанное время.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
А объекты синхронизации Винды чем не нравятся ?
Вот тут можно посмотреть - http://msdn.microsoft.com/library/default....ent_objects.asp |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
alexeis1, он будет приостановлен на несколько секунд, в общем мне нужен аналог sleep который при синхронизации не будет тормозить основную программу, либо каким-то образом
передавать
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
"Какой-то образ" - это SendMesage (или PostMessage)
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
и опять мы возвращаемся к началу...
Sleep() торможит только текущий поток ( остальные не тормозятся ) поэтому если наблюдается торможение -- где0то в логике ошибка. а что не понятно с сообщениями? -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
Poseidon прав
регистрируется сообщение У формы делается обработчик В нужный момент поток отправляет сообщение первой форме. обработчик запускает вторую форму - только так -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
Poseidon, кажется то что надо, а как с помощью этого выполнить допустим
тоесть какими параметрами вызывать, или где их подглядеть? Это сообщение отредактировал(а) NoliX - 19.1.2006, 14:00 --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Какие параметры ты имеешь ввиду?
В обще виде где-то так
В главной форме пишешь обработчик сообщения WM_User+101, а в нем то, что нужно сделать при получении этого сообщения. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
так, кажется начинаю понимать, осталось ознать, как написать обработчик сообщения =(
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
вот пример drkb
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
alexeis1, спасибо большое, сейчас попытаюсь разобраться, скорее всего это то, что нужно...
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Да на самом деле все очень просто. Вот как обработать наше WM_User+101
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
Poseidon, все замечательно, это действительно то что надо, спасибо, mjkmrj вот последний вопрос, мне нужно в этом сообщении передать больше 2-х переменных, это возмжно?
и как тогда их вызвать в процедуре обработки события, первые 2 как я понят вызываются WParam LParam Это сообщение отредактировал(а) NoliX - 19.1.2006, 14:42 --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
больше параметров передать нельзя.
но никто не мешает создать структуру и передать одним из параметров указатель на нее -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| NoliX |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 5.7.2005 Репутация: нет Всего: 1 |
Все ясно, всем принимавшим участие огромное спасибо, в том числе и за терпение, дальше разберусь сам...
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |