"Вы запрашивали, чтобы события холостого хода генерировались с максимальной скоростью? Вы должны вызвать RequestMore () для события, если нет, вы получите следующее событие простоя только после обработки какого-либо другого события. эта постоянная обработка в режиме ожидания приведет к 100% загрузке ЦП на одно ядро. "
Это работает, у меня есть следующий код в графическом окне: -
BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
EVT_PAINT (MyCanvas::OnPaint)
EVT_IDLE(MyCanvas::OnIdle)
EVT_MOTION (MyCanvas::OnMouseMove)
END_EVENT_TABLE()
Холст должен обновляться при вызове my_canvas-> Refresh (bClearBackground), а не иначе. Для этого мне нужно было внести изменения, так как программа потребляла половину времени процессора (или 100% от 1 процессора на ядре дуэли).
void MyCanvas::OnIdle(wxIdleEvent &event)
{
wxPaintEvent unused;
OnPaint(unused);
event.RequestMore(false);
}
Если для параметра RequestMore()
установлено значение false, приложение будет запрашивать больше только тогда, когда это необходимо, то есть только при вызове Refresh()
.