Вывод графики в отдельном потоке
От: Vovan_2 Россия  
Дата: 14.04.05 20:52
Оценка:
Здравствуйте.

Программа на MFC (VS .NET) занимается рисованием на экране картинок -- по сути дела графиков специального вида некоторых функций. Вывод осуществляется с помощью метода CDC::SetPixelV(). Рисование может занимать продолжительное время (скажем, секнд 10) и хочется, чтобы остальной интерфейс при этом не тормозил. Кроме того, очень желательно иметь возможность прервать построение по нажатию кнопки или клавиши. Я запускаю цикл, выполняющий построение в отдельном потоке при помощи AfxBeginThread(), однако, при выполнении ничего не происходит и не рисуется. Если просто вызываю функцию потока, то все нормально.

В чем здесь может быть ошибка? Допускаю, что объект типа CDC создается только на время работы OnDraw() и к моменту запуска потока указатель на него, который я передаю функции потока указывает непонятно куда. Я бы так и думал, если бы не один интересный факт. Если перед окном программы поместить другое окошко (например калькулятор) и подвигать, то там, на том месте, где было окно появляется изображение! В чем же тут дело?
Re: Вывод графики в отдельном потоке
От: Axc  
Дата: 15.04.05 07:21
Оценка:
Мысль вслух: создай честный user-interface thread, и уже в нем — окно, в которое выводишь графику.
Должно помочь.
Re: Вывод графики в отдельном потоке
От: Аноним  
Дата: 15.04.05 11:31
Оценка:
Здравствуйте, Vovan_2, Вы писали:

V_>Здравствуйте.


V_>Программа на MFC (VS .NET) занимается рисованием на экране картинок -- по сути дела графиков специального вида некоторых функций. Вывод осуществляется с помощью метода CDC::SetPixelV(). Рисование может занимать продолжительное время (скажем, секнд 10) и хочется, чтобы остальной интерфейс при этом не тормозил. Кроме того, очень желательно иметь возможность прервать построение по нажатию кнопки или клавиши. Я запускаю цикл, выполняющий построение в отдельном потоке при помощи AfxBeginThread(), однако, при выполнении ничего не происходит и не рисуется. Если просто вызываю функцию потока, то все нормально.


V_>В чем здесь может быть ошибка? Допускаю, что объект типа CDC создается только на время работы OnDraw() и к моменту запуска потока указатель на него, который я передаю функции потока указывает непонятно куда. Я бы так и думал, если бы не один интересный факт. Если перед окном программы поместить другое окошко (например калькулятор) и подвигать, то там, на том месте, где было окно появляется изображение! В чем же тут дело?


Не знаю, на сколько поможет. Но у мс есть пример на эту тему MTGDI. Посмотрите в MSDN
Re[2]: Вывод графики в отдельном потоке
От: Аноним  
Дата: 21.04.05 13:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Не знаю, на сколько поможет. Но у мс есть пример на эту тему MTGDI. Посмотрите в MSDN


Большое спасибо, действительно помогло.
Когда я стал рисовать CClientDC, а не в CPaintDC все заработало.
Re[3]: Вывод графики в отдельном потоке
От: Vovan_2 Россия  
Дата: 21.04.05 13:53
Оценка:
А>Большое спасибо, действительно помогло.
А>Когда я стал рисовать CClientDC, а не в CPaintDC все заработало.

Это был мой ответ. Забыл залогиниться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.