Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2011, 22:40   #11
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Что-то в голову ничего дельного не лезет(
psycho-coder вне форума Ответить с цитированием
Старый 31.10.2011, 22:48   #12
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
По умолчанию

На форуме forum.sources.ru сказали, что кроме как выполнять функцию в отдельном приложении, альтернативы нет, сам слонялся к этому варианту
carno вне форума Ответить с цитированием
Старый 31.10.2011, 23:32   #13
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Ну, занчит в отдельном приложении.

Мне почему-то казалось, что есть какой-то способ. Наверно показалось(
psycho-coder вне форума Ответить с цитированием
Старый 01.11.2011, 06:31   #14
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Создаете поток.
Запускаете таймер.
В потоке начинаете считать что вам нужно.
По завершении счета поток должен синхронизовать свою функцию, которая остановит таймер.
Таймер по завершении должен убить поток и сообщить о таймауте.

Влючайте голову иногда, что-ли...
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 01.11.2011, 11:26   #15
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Johnson Посмотреть сообщение
Создаете поток.
Запускаете таймер.
В потоке начинаете считать что вам нужно.
По завершении счета поток должен синхронизовать свою функцию, которая остановит таймер.
Таймер по завершении должен убить поток и сообщить о таймауте.

Влючайте голову иногда, что-ли...
Если в потоке, будет выполнятся моя функция, в которой будет while true, ни кто никогда не синхронизирует ничего, и этот поток нужно будет прервать не изнутри, а снаружи, да и так, чтобы все созданные компоненты, были освобождены. В функции может быть абсолютно произвольный код, ни кем не контролирующийся
carno вне форума Ответить с цитированием
Старый 01.11.2011, 11:32   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а кто вам мешает добавить синхронизацию в поток?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.11.2011, 11:39   #17
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Цитата:
в которой будет while true
Значит, вам нужно что-то сделать...
Например, подумать о бытие, пока ждете завершения счета...

Цитата:
В функции может быть абсолютно произвольный код, ни кем не контролирующийся
Бесчисленное количество шимпанзе, неограниченное время стачащее по клавишам печатной машинки могут написать "Войну и мир". © Теория вероятностей.

Если ВАШ код НИ КЕМ не контролируется - задумайтесь. Как минимум он должен контролироваться Вами.

Цитата:
этот поток нужно будет прервать не изнутри, а снаружи
Кто мешает? По событию таймера:
Код:
MyThread.Terminate;
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 01.11.2011 в 11:43.
Johnson вне форума Ответить с цитированием
Старый 01.11.2011, 11:42   #18
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а кто вам мешает добавить синхронизацию в поток?
Смысл в синхронизации, если поток зависнет на выполнении функции, он до синхронизации не доедет ? А даже если из вне потока увидеть, что поток долго не отвечает, его нужно убить, жестко, но тогда, все объеты, которые в нем, остануться в памяти.

Проблема не в определении зависла или не зависла функция, а в том, что ее(или поток) нужно прервать корректно для памяти
carno вне форума Ответить с цитированием
Старый 01.11.2011, 11:46   #19
carno
Пользователь
 
Аватар для carno
 
Регистрация: 15.04.2009
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Johnson Посмотреть сообщение
Значит, вам нужно что-то сделать...
Если ВАШ код НИ КЕМ не контролируется - задумайтесь. Как минимум он должен контролироваться Вами.
Код:
MyThread.Terminate;
Дело в том, что функции добавляются постоянно с бешенной скоростью кучей программеров, если один паразит напортачит, служба если не повиснет, то начнет потихонку жрать память, этого нужно избежать.

Неважно, while true там, или время соеднинение с соседним сервером превысит все разумные рамки. Главное принцип.

Можно конечно все контролировать и перепроверять и обкатывать, но стоит лишь один раз прохохотать некритичный косяк, поиск его займет уйму человеко часов
carno вне форума Ответить с цитированием
Старый 01.11.2011, 11:47   #20
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Смысл в том, что если поток не вызовет синхронизацию, которая останавливает таймер - то таймер убьет поток... Такая процедура называется Watchdog, и на микроконтроллерах устроена аппаратно даже...
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прерывание Ирида Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 27.10.2011 04:36
Прерывание VKorablev Паскаль, Turbo Pascal, PascalABC.NET 5 15.04.2011 21:12
6 прерывание ленусик Фриланс 1 03.06.2008 16:22
6 прерывание ленусик Помощь студентам 5 30.05.2008 16:57