![]() |
|
Модераторы: 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 --------------------
Опыт - это учитель, который очень дорого берет за свои уроки |
|||
|
||||
![]()
|
| Правила форума "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. |