|
|
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. У меня следующий вопрос. Как мне запускать поток каждые <опредмеченное время в секундах>? Я создал класс потока Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. все методы реализовал, теперь сам поток вызываю через компонент TTimer , используя метод OnTimer: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Теперь через определенное время, срабатывает таймер и выполняется OnTimer, в это время происходит подвисание основной программы. У меня вопрос как сделать так, что поток не мешал основной программе, ну то есть чтоб она не подвисала? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2019, 22:46 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
LMagкак сделать так, что поток не мешал основной программе, ну то есть чтоб она не подвисала? Написать его правильно. Граблей для новичка на этом пути немерено. От огульного использования Synchronize до сериализации вызовов Firebird API в пределах одного коннекта клиентской библиотекой. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2019, 23:00 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Я понимаю что надо писать правильно, но как или дайте ссылку метод execute я реализовал так Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2019, 23:03 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
LMagметод execute я реализовал так Ну да, худший сценарий, типичная ошибка. Человек, написавший этот неправильный код давно умер, но дело его живёт. Synchronize надо использовать очень осторожно. Читай штатную справку. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2019, 23:06 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
LMag Я понимаю что надо писать правильно, но как или дайте ссылку метод execute я реализовал так Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2019, 23:21 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
А как тогда переписать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2019, 23:52 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
LMag, А что делает доп.поток? Какие-то циклические действия? Если так, то можно использовать эвенты. По таймеру взводить и сбрасывать эвент, который будет соответственно замораживать/размораживать доп.поток ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 00:22 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Док, Ну поток опрашивает базу на количество введеных записей тем или иным оператором. Хотел бы узнать как отдельным эвентом останавливать и запускать поток? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 00:27 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
LMag Ну поток опрашивает базу на количество введеных записей тем или иным оператором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 00:34 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Ещё есть Application.OnIdle....но это, наверное, хуже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 00:35 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
А как запускать и останавливать поток в таймере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 00:46 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
LMag А как запускать и останавливать поток в таймере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 00:58 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
LMagА как запускать и останавливать поток в таймере? Никак. Поток запускается один раз и работает сам собой. Нечего делать - спит. А опрашивать базу таким образом - плохая идея номер два. Если тебе надо оперативное оповещение о действиях оператора - или используй POST_EVENT или организуй доставку извещений мимо базу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 01:17 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Квейд LMag Я понимаю что надо писать правильно, но как или дайте ссылку метод execute я реализовал так Код: pascal 1. 2. 3. 4. 5. Просто вызов в основном потоке отработал бы намного быстрее, и без граблей. Хотя зачем я это пишу, скорей всего ТС - пятничный тролль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 02:54 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Даю подсказку: сначала следует проверять, не увеличилось ли последнее значение генератора с помощью Select gen_id(genname, 0) from rdb$database И если изменилось, тогда будет смысл пересчитывать количество записей. При этом следует также контролировать наличие последней записи по значению генератора. В нашем колхозе так делают :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 08:28 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Это работает, если записи не удаляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 08:30 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
LMag Ну поток опрашивает базу на количество введеных записей тем или иным оператором. Хотел бы узнать как отдельным эвентом останавливать и запускать поток? можешь почитать тут https://www.transl-gunsmoker.ru/2009/04/blog-post_17.html?m=1 http://forum.ixbt.com/topic.cgi?id=26:38680 http://www.interface.ru/home.asp?artId=6105 Я как-то игрался в эвентами, простейший тестовый проект прилагаю. Но он под Лазарь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 21:00 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
А почему бы не использовать готовый функционал windows: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Используем так: Код: pascal 1. 2. 3. 4. 5. 6. 7. Сигнализацию о завершении и доставку результатов в вызывающий поток добавить по вкусу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2019, 23:26 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Barmaley57, ".... котикоф? Да вы просто не умеете их готовить!" "" Вы должны быть внимательными при использовании функции SleepEx и кода, который прямо или косвенно создает окно. Если поток создает какие-либо окна, он должен обрабатывать сообщения. Циркулярное сообщение отправляется всем окнам в системе. Если Вы имеете поток, который использует функцию SleepEx с бесконечной задержкой, система зайдет в тупик. Два примера кода, которые косвенно создают окна - это динамический обмен данными (DDE) и модель многокомпонентных объектов (COM) CoInitialize. Поэтому, если Вы имеете поток, который создает окна, используйте MsgWaitForMultipleObjects или MsgWaitForMultipleObjectsEx, а не SleepEx. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2019, 00:18 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, как это относится к данной теме? С дуру то можно и х... сломать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2019, 12:55 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Barmaley57, не учите людей плохому. Если "готовый функционал windows", то это CreateThread. Вот и покажите пример с его применением для Delphi и c сообщениями/событиями для взаимодействия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2019, 17:10 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Я перенес код работы с бд в метод execute Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Теперь у меня программа при выполнения данного потока зависает... убираю FQuery, программа нормально работает... В чем проблема? Отдельно проверил вне потока, выполняется нормально... А когда в потоке , программа виснет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2019, 00:09 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
1. Попробуйте создавать в потоке отдельное подключение к БД. В идеале использовать пул подключений. 2. Используйте конструкцию try..finally, удаляйте объекты в разделе finally. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2019, 00:38 |
|
||
|
Поток и timer
|
|||
|---|---|---|---|
|
#18+
Так же в начале поставил while not Terminated do Без этой строки программа зависала, как только запускался поток И еще пытаюсь вывести в потоке сообщение типа Код: pascal 1. ничего не выходит.... Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2019, 01:03 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39893712&tid=2038817]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
4ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
| others: | 256ms |
| total: | 449ms |

| 0 / 0 |
