Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Доброго всем времени суток! Прошу помощи в следующем вопросе. Объект класса назовем его "ccm" имеет функцию получения данных. В TTimer "Time" идет обращение к функции считывания Код: plaintext 1. и последующая обработка полученных результатов 1. Показать данные в виде графиков 2. записать данные в файл. 3. посчитать на основании данных что-то 4. показать это что-то опять на графиках. и все бы ничего но показ графиков "TChart" реально тормозит запись и подвешивает всю работу расчетов. Была слабая попытка использовать TTask но отсутствие знаний опыта в этом вопросе "и хреновая звездограмма :)" не дают желаемого результата. Код попытки: Код: 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. 35. Теперь о наболевшем! - если таск успевает показать графики до оканчания работы таймера Sleep ( скажем 1000) то вcё ок. - если нет, Sleep скажем 8000, то создается новый таск в заново стартонувшем таймере снова и снова пока не подвешивает прогу. Как быть и что делать ? с ув Виктор ! П.С. пытался определить в разных местах статуци типа Код: plaintext 1. но при "Sleep ( mnogo dannich 8000)" не помогает. Таймер перестартовывает раньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2017, 16:28 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
komvik, Ну я, честно говоря, ничего не понял. Понятно, что нужно правильно распараллелить расчёт и показ графиков, но как это делать -- зависит от задачи, я лично из твоих объяснений не понял пока ничего собственно о задаче. Если какие-то мифические TTask-и тебе непонятны, попробуй воспользоваться стандартными <future> из С++ (11). Они достаточно просты для понимания и не требуют никаких классов и иерархий. Если их сопрячь с лямбдами, будет ещё проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:26 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Да, и таймеры для многозадачного программирования не применяются. Забудь про них пока не поймёшь , зачем они. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:27 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Видимо первое обьяснение было сумбурным. В виду необходимости решения этой задачи я создал топик в делфях. мне там ответили но не помогло. я могу сделать копию обьяснения могу скинуть ссылку а могу есче раз обьяснить попробовать.Как правильней? на всякий случай ссылка. http://www.sql.ru/forum/1261481/parallel-programming-library-ttask-timer надеюсь на помощь.:) с ув Виктор ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:33 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Да, и таймеры для многозадачного программирования не применяются. Забудь про них пока не поймёшь , зачем они. ну не я это начинал мне этот г...р от коллеги достался. Жесткая задача. Не меняй а усовершенствуй. Работает таймер . читает пишет показывает. Задача разделить процессы внутри таймера чтоб рисовалка диаграмм работала сама по себе и не тормозила запись данных. Отрисовка работает себе по тихоньку пока не закончит не обращая внимания на работу таймера. Но по завершении рисования опять в таймере получает новую порцию данных для рисования. вопро стоит нового рисования пока не закончилось старое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:42 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
1. Запускаем отдельную нитку Б подготовки данных. - в главном потоке на форме рисуем Waiting или песочные часы на предыдущем графике 2. По завершению Б выставляем флаг/condition var что то вроде http://en.cppreference.com/w/cpp/thread/notify_all_at_thread_exit -в главном потоке отдаем графику новые данные Вариант - если обновление регулярное - то Б не завершаем, а через флаг готовности / мутекс _копируем_ готовую пачку данных основному потоку Ну и конечно, желательно учесть масштаб/разрешение графика, чтобы количество точек не было больше, чем в принципе можно отобразить на экране ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:51 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
komvikMasterZiv, Да, и таймеры для многозадачного программирования не применяются. Забудь про них пока не поймёшь , зачем они. ну не я это начинал мне этот г...р от коллеги достался. Жесткая задача. Не меняй а усовершенствуй. Работает таймер . читает пишет показывает. Задача разделить процессы внутри таймера чтоб рисовалка диаграмм работала сама по себе и не тормозила запись данных. Отрисовка работает себе по тихоньку пока не закончит не обращая внимания на работу таймера. Но по завершении рисования опять в таймере получает новую порцию данных для рисования. вопро стоит нового рисования пока не закончилось старое. Оберни код мутексом и при запуске проверяй: если занят, то значит еще работает предыдущий запуск и ничего делать не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:00 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Siemargl, дак а я за что? Я ТОЛЬКО ЗА. только нету у таска мьютекса.или я не нашел:) Вот набросал схемку. Да. работа таймера непрерывна. а показывать и без песочных часов можно. Получил. Показал. Как мне в таске впихнуть этот флаг готовности ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:04 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Dima T, Дима как? код вверху где что записать ? есть класс передаю данные через конструктор в таймере при создании обьекта. все. мне нужно только проверку окончания таска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:08 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
komvikтолько нету у таска мьютекса.или я не нашел:) Мутекс сам по себе. Хоть WinAPI используй. Глобальную переменную объяви в конце-концов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:09 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Dima T, так я и создал флаг пока что как лэйбл чтоб было видно. потом сделаю просто bool переменную. все работает только как то не спокойно за синхронизацию изменения состояния флага. код я в форуме делфи выложил. ссылка выше. не хочу мусорить в форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:17 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
komvikDima T, Дима как? код вверху где что записать ? есть класс передаю данные через конструктор в таймере при создании обьекта. все. мне нужно только проверку окончания таска. Если правильно понял твою схему на картинке, то так надо Код: 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. 35. 36. 37. 38. 39. 40. 41. 42. PS Если std::mutex будешь использовать, то для него есть std::unique_lock ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:20 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
komvik, другими словами как главному тайму(программе) узнать что таск закончил работу чтобы запустить таск заново. Естественно автоматически и внутри таймера с передачей данных через коструктор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:22 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Dima T, немножечко не так. при работе таймера я создаю обьект таска. и пока он не закончит работу. я не создаю новый таск. Вопрос как узнать окончание работы таска? если таймер не узнает что таск есче работает он создает новый таск пока не заполнит память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:27 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
komvikDima T, немножечко не так. при работе таймера я создаю обьект таска. и пока он не закончит работу. я не создаю новый таск. Вопрос как узнать окончание работы таска? если таймер не узнает что таск есче работает он создает новый таск пока не заполнит память. Он не создаст новый таск пока старый не отработает. Ты мутексами пользовался когда-нибудь? Если один поток захватил мутекс (mtx.lock()) то второй поток повиснет на mtx.lock() до тех пор пока первый не вызовет mtx.unlock() т.е. пока первый таск работает - твой код будет висеть пока таск не отработает Если висеть не надо, то можно проверить блокировку Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:34 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Я так понимаю "Parallel Programming Library" это дельфийный С++. Если так то лучше в дельфи спросить как этими тасками пользоваться, т.к. это не С++, а самостоятельная либа, которую в С++ мало кто использует. Вот нагуглил : авторTTask – это класс, который позволяет запускать одну задачу или несколько задач параллельно. При этом вам не придётся создавать поток и управлять им. Класс TTask реализует интерфейс ITask. В интерфейсе ITask в вашем распоряжении есть функции для запуска (Start), ожидания (Wait) и отмены (Cancel) задачи и статус (Status), позволяющий узнать, что происходит с задачей. Вот возможные статусы задачи: Created (задача создана), WaitingToRun (задача ожидает окончания выполнения другого процесса), Running (задача выполняется), Completed (задача завершена), WaitingForChildren (задача ожидает окончания выполнения дочерней задачи), Canceled (задача была отменена), Exception (при выполнении задачи произошла ошибка). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:42 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Dima T, мютексами не пользовался думаю ничего военного. останавливать и ждать нельзя. просто таймер молотит свою работу и по освобождению таска выдает ему новое задание. все. Я немогу узнать окончание работы таска! не надо никого блокировать. все работает без ожиданий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:46 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Dima T, проблемма в том что инфы оч мало. в делфях тоже все подвисают никакой конкретики. общие фразы. то что ты.вы. нашли(шел) я не знаю как правильней:) я уже давно как сон вижу. в эмбаркадеро три кастрированных примерчика которые на примитивном уровне обьясняют . А дальше сам... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:51 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
komvik, вот я и мыкаюсь в поисках спецов конкретики а получаю обобщенные советы подумать на тему а не использовать ли опен джиэль в тчарте. Я без претензий:) мне бы хелп получить. с ув Виктор ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:54 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
komvikDima T, проблемма в том что инфы оч мало. в делфях тоже все подвисают никакой конкретики. общие фразы. то что ты.вы. нашли(шел) я не знаю как правильней:) я уже давно как сон вижу. в эмбаркадеро три кастрированных примерчика которые на примитивном уровне обьясняют . А дальше сам... Документация на это поделие (TTask, Timer) есть в инете хоть какая-нибудь? Если есть - давай ссылки. Распараллеливание - это достаточно сложная тема с кучей граблей. По-хорошему надо начинать с этой книги Джеффри Рихтер Создание эффективных Win32-приложений PS Правильно "ты" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:11 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
komvikDima T, мютексами не пользовался думаю ничего военного. останавливать и ждать нельзя. просто таймер молотит свою работу и по освобождению таска выдает ему новое задание. все. Я немогу узнать окончание работы таска! не надо никого блокировать. все работает без ожиданий. Если останавливать нельзя, то таск должен как-то оповестить что он закончил. Не надо проверок таска, он должен инициировать дальнейшую работу. Как вариант: запускать таймер таском, т.е. при срабатывании таймера останавливаешь таймер, подготавливаешь таск, запускаешь, в конце работы таска высчитываешь сколько времени осталось до следующей сработки, ставишь на это время таймер, запускаешь таймер и так по кругу. Можно проще: вместо таймера просто собственное виндовое сообщение, по которому происходит подготовка исходных данных, а в таске в конце Sleep() на время до следующей сработки и отправка сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:31 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Dima T, Распараллеливание - это достаточно сложная тема с кучей граблей. По-хорошему надо начинать с этой книги Джеффри Рихтер Создание эффективных Win32-приложений только там о тасках нет ничего.:( настольная книга в пдэфе. таймер не останавливается!!!!! Я могу облокотится на время работы таска. Но таймер должен работать без остановов локов ожиданий итд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 15:27 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Dima T, ссыло? да пожалуйста. http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_TTask_from_the_Parallel_Programming_Library http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Tutorial:_Using_Tasks_from_the_Parallel_Programming_Library http://docwiki.embarcadero.com/RADStudio/Berlin/en/Tutorial:_Using_the_For_Loop_from_the_Parallel_Programming_Library http://docwiki.embarcadero.com/CodeExamples/XE7/en/TMutexAcquire_(C ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 15:35 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
komvikтолько там о тасках нет ничего.:( Там об устройстве виндовса и WinAPI, на котором таски и таймеры работают. И о подводных камнях многопоточных приложений. Похожим образом устроены таски в C#, можешь про них почитать у того же Рихтера Глава 27. асинхронные вычислительные операции komvikНо таймер должен работать без остановов локов ожиданий итд. Мой пост выше читал 20523566 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 15:45 |
|
||
|
Parallel Programming Library TTask+Timer (c++)
|
|||
|---|---|---|---|
|
#18+
Dima T, Как вариант: запускать таймер таском, т.е. при срабатывании таймера останавливаешь таймер, подготавливаешь таск, запускаешь, в конце работы таска высчитываешь сколько времени осталось до следующей сработки, ставишь на это время таймер, запускаешь таймер и так по кругу. таск создается в РАБОТАЮЩЕМ БЕЗ ОСТАНОВКИ таймере И живет своееей жизнью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 15:56 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39462435&tid=2018161]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 266ms |

| 0 / 0 |
