Программа на MFC (VS .NET) занимается рисованием на экране картинок -- по сути дела графиков специального вида некоторых функций. Вывод осуществляется с помощью метода CDC::SetPixelV(). Рисование может занимать продолжительное время (скажем, секнд 10) и хочется, чтобы остальной интерфейс при этом не тормозил. Кроме того, очень желательно иметь возможность прервать построение по нажатию кнопки или клавиши. Я запускаю цикл, выполняющий построение в отдельном потоке при помощи AfxBeginThread(), однако, при выполнении ничего не происходит и не рисуется. Если просто вызываю функцию потока, то все нормально.
В чем здесь может быть ошибка? Допускаю, что объект типа CDC создается только на время работы OnDraw() и к моменту запуска потока указатель на него, который я передаю функции потока указывает непонятно куда. Я бы так и думал, если бы не один интересный факт. Если перед окном программы поместить другое окошко (например калькулятор) и подвигать, то там, на том месте, где было окно появляется изображение! В чем же тут дело?
Мысль вслух: создай честный 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 все заработало.