Конференция "WinAPI" » Рисование в окне из другого потока [D7, WinXP]
 
  • Dmitry S © (11.06.08 19:51) [0]
    Есть окно в основном потоке.
    Есть дополнительный поток, который обрабатывает данные и выводит их на окно.

    При этом используется DoubleBuffered, поэтому данные сперва отрисовываются в битмап, а потом уже на окно.

    Как потоко-безопасно это сделать?

    Пока у меня только одная мысль:
    Критическая секция на буфер окна + специальное сообщение окну, что буфер изменился...
    Какие еще будут идеи?
  • Игорь Шевченко © (11.06.08 19:56) [1]

    > Как потоко-безопасно это сделать?


    через Synchronize ?

    А причем тут, кстати, WinAPI ?
  • Dmitry S © (11.06.08 20:00) [2]
    Так VCL не использую... Самосозданное окно, и поток:)
  • Сергей М. © (11.06.08 21:10) [3]

    > Какие еще будут идеи?


    Пользовать синхронные сообщения  окну и выкинуть нафих крит.секцию)
  • Dmitry S © (11.06.08 21:12) [4]

    > Пользовать синхронные сообщения

    синхронные - это SendMessage?
  • Сергей М. © (11.06.08 21:14) [5]
    Не только, но в т.ч. и в п.о.
  • Игорь Шевченко © (11.06.08 22:49) [6]

    > Так VCL не использую... Самосозданное окно, и поток:)


    > Есть дополнительный поток, который обрабатывает данные и
    > выводит их на окно.
    >
    > При этом используется DoubleBuffered, поэтому данные сперва
    > отрисовываются в битмап, а потом уже на окно.


    а зачем так сложно ? Поток что-то просчитал и сказал UpdateWindow - вызвалась в нужный момент времени WM_PAINT и нарисовала.
    Рихтер таких примеров приводит довольно много и без всяких DoubleBuffered
  • Dmitry S © (13.06.08 14:29) [7]

    > Рихтер таких примеров приводит довольно много и без всяких
    > DoubleBuffered

    Данные меняются ~25 раз в секунду, DoubleBuffered нужно, чтобы не моргало :)
  • Игорь Шевченко © (13.06.08 15:27) [8]
    Dmitry S ©   (13.06.08 14:29) [7]

    А зачем их так часто рисовать ? Кино, что ли ?
    Рисуй раз в определенный интервал, ну хоть раз в секунду или в 2..10
  • Dmitry S © (13.06.08 20:03) [9]

    > Игорь Шевченко ©

    Мультипликация вобщем.
  • Leonid Troyanovsky © (15.06.08 10:52) [10]

    > Dmitry S ©   (11.06.08 19:51)  

    > Какие еще будут идеи?

    Если в целевой системе один процессор, то все это overhead.
    http://dtf.ru/articles/read.php?id=39888

    --
    Regards, LVT.
 
Конференция "WinAPI" » Рисование в окне из другого потока [D7, WinXP]
Есть новые Нет новых   [134433   +21][b:0][p:0]