|
|
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
Прошу помощи в следующем вопросе. Объект класса назовем его "ccm" имеет функцию получения данных. В ТТimer "Тimer” идет обращение к функции считывания. ccm->GetResult((TBufferCast *)&Result) и последующая обработка полученных результатов 1. Показать данные в виде графиков 2. записать данние в файл. 3. посчитать на основании данных чтото 4. показать это чтото опять на графиках. и все бы ничего но показ графиков "ТChart" реально тормозит запись и подвешивает всю работу расчетов. Была слабая попытка исползовать ТТаsk но отсутствие знаний опыта в этом вопросе "и хреновая звездограмма :)" не дают желаемого результата. Код попытки: Код: plaintext 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. Теперь о наболевшем! - если таск успевает показат графики до оканчания работи таймера Sleep ( скажем 1000) то все ок. - если нет Sleep ( предположим 8000) то создается новый таск в заново стартонувшем таймере снова и снова пока не подвешивает прогу. Как быть и что делать ? с ув Виктор ! П.С. пытался определит в разных местах статусы типа if (task->Status == ТТаskStatus::Completed) но при "Sleep ( много данных 8000)" не помогает. Тimer перестартовывает раньше. Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 16:26:44 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
komvikи все бы ничего но показ графиков "ТChart" реально тормозит запись и подвешивает всю работу расчетов.Давайте код показа графиков. Там куча мест для оптимизации. Самое банальное, это выводить так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Если точек много, то имеет смысл использовать TFastLine. Также, возможно придется организовать прореживание из расчета не более 1 точки на пиксел. + учитывать ограничение осей. Автомасштабирование осей лучше выключить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 19:00:46 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
Операции с интерфейсом и соответственно с графикой в TChart нельзя производить вне основного потока. В TTask перенесите работу с данными а в onTimer перерисовывайте графики по данным, когда они будут подготовленны другими потоками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 19:08:04 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
komvik, Код: plaintext 1. 2. 3. _Vasilisk_организовать прореживание из расчета не более 1 точки на пиксел. + учитывать ограничение осей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 00:26:29 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
komvik, Спасибо огромное за ответы. С оформлением буду по внимательнее. Порядок есть порядок. Что касается оптимизации графиков, там все оптимизированно. И TFastLine и колличество точек при масштабировании и многое другое. rgreat пишет " Операции с интерфейсом и соответственно с графикой в TChart нельзя производить вне основного потока. " хотелось бы по подробнее почему. где почитать. есче rgreat пишет В TTask перенесите работу с данными а в onTimer перерисовывайте графики по данным, когда они будут подготовленны другими потоками. Дело в том что я не могу изменить структуру программы. я могу только усовершенствовать. На таймере завязанны многие отдельные процессы. например при одном проходе таймера данные на приборе с которого считывается инфа сбрасываются для получения и формирования следующего пакета данных. Другими словами в начале таймера данные полученны в конце удалены. Идея заключается в том что данные для отрисовки не обязательно показывать при каждом проходе таймера. Важно каждый проход записывать.А вот отображение графиков только после завершения потока тоесть рисования. Таск получает новую порцию данных и дальше живет своей жизнью пока не закончит рисовать. Прерывать на ожидание останавливать или задерживать работу таймера нельзя. Он синхронизирован с прибором для получения данных по времени. как то так. С ув. Виктор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 10:34:01 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
komvik, Есче раз другими словами. В таймере создать таск и запустить паралельно но уже (наверное) независимо от таймера. При этом передать параметры полученные внутри таймера!! По завершении или убить или перезапустить. задача частично решена примитивным образом но (интуитивно чувствую)может быть проблемма. Хотелось бы элегантности в коде. Ну и о оптимизации не забывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 11:08:33 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
komvik, TChart не задумывался как средство динамического показа больших данных да, удобный да, простой но никак не RealTime Если танцы с бубном TChart не помогут, то рисовать самому. В этом нет ничего сложного, буфер + разумная отсечка невыводимых точек + Polyline и вас не догонят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:03:22 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), да я на все сто согласен. у меня задача отловить конец выполнения таска созданного в таймере если поможет я набросал схемку в форуме с++ не хчу флудить поэтому просто ссылка http://www.sql.ru/forum/1261482/parallel-programming-library-ttask-timer-c ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:12:37 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:27:21 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
rgreat, и как это относится к конструктору таска который в верху тпика? я не против типа учи матчасть. я против иди почитай. если вы поняли о чем это я. Как узнать окончание работы таска отлов типа не помогает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:34:43 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
Ты спросил что делать, я сказал - переноси отрисовку в основной поток, а работу с данными в фоновый. Тебе не понравилось. Ок. Ты спросил как избежать повторных срабатываний до завершения рисования - я ответил - используй CriticalSection. Опять - не то. Давай уж сам тогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:47:50 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
rgreat, да я пытаюсь сам. не выходит. чеб я здесь тогда подьедался. Только к сожалению ответы не в тему. Боже упаси. Без обид. Поскольку я не знаю как. не могли бы вы показать на примере моего класса. топик вверху. Созданного обьекта в таймере. Куда я должен привинтить эту критическую секцию. Ну очена надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:03:06 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
komvik, тобиш как отловить окончаие таска не останавливая не блкируя не синхронизируя. узнать окончание таска:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:04:54 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
komvikтобиш как отловить окончаие таска не останавливая не блкируя не синхронизируя. узнать окончание таска:) Банальным булевым флагом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:25:06 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
может TTask проще поменять на обычный TThread? Тут обёртки еще делали, может их посмотреть? Зачем именно TTask? Окончание TThread'а ловится без проблем. Сложно сказать насчет TTask'а, в моей версии пока его нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 16:14:35 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
komvikkomvik, а хочется чего то чистого светлого ну вы меня понимаете ручной Event выставляй и в потоке цикл с его ожиданием в таймер Код: pascal 1. в потоке Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 17:02:56 |
|
||
|
Parallel Programming Library TTask+Timer
|
|||
|---|---|---|---|
|
#18+
Господи, откуда только такие берутся... Сначала транслитом писал, хотя есть куча онлайн-переводичков и трансляторов. Потом код без SRC постил, ну и наконец стал постить код картинками. Ппц. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 20:46:16 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=142&tid=2042224]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
62ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 340ms |

| 0 / 0 |
