Где я могу разместить логику моей программы MFC? - PullRequest
0 голосов
/ 16 мая 2010

Я создал ядро ​​приложения в C ++, которое я собрал в статическую библиотеку в Visual Studio. Сейчас я нахожусь в процессе написания графического интерфейса для него. Я использую MFC для этого. Я выяснил, как отображать нажатия кнопок для выполнения определенных методов основного класса ядра моего приложения (т. Е. Кнопок для его запуска и остановки). Основной класс, однако, всегда должен выбирать данные из внешнего источника каждую секунду или две. Графический интерфейс должен заполнять некоторые поля после каждой выборки. Кажется, я не могу найти место в моих объектах MFC, таких как CDialog, которое я могу постоянно проверять, чтобы убедиться, что мой класс захватил данные ... затем, если он поместил эти данные в некоторые текстовые поля.

Друг предложил мне создать поток в подпрограмме OnInit (), который позаботится об этом, но это решение на самом деле не работает для меня.

Нет ли места, где я могу поместить оператор if, который будет вызываться до тех пор, пока программа не закроется?

т.е.

if( coreapp.dataSampleReady() ) {
  // put coreapp.dataItem1() in TextBox1
  // set progress bar to coreapp.dataItem2()
  // etc.
  // reset dataSampleReady
}

Ответы [ 2 ]

1 голос
/ 23 мая 2010

Вы упомянули «каждую секунду или две», в то время как другой ответ предложил «использовать управляемую событиями парадигму». Как насчет установки таймера в диалоговом окне и когда таймер срабатывает, пример данных из вашего внешнего источника. Вы указали, что выяснили, как сопоставить обработчики событий для кнопок, поэтому сопоставление обработчика с таймером должно быть для вас естественным расширением.

1 голос
/ 16 мая 2010

Полагаю, вы можете поместить его в OnIdle .

Вам лучше использовать управляемую событиями парадигму, хотя, поскольку система опроса будет чрезмерно потреблять мощность процессора. Поэтому у вас есть поток, который находится в WaitForSingleObject . Когда dataSampleReady установлен, все, что вам нужно сделать, это вызвать событие, которого ожидает поток. Таким образом, вы не будете постоянно загружать процессор, чтобы что-то проверить. Он будет сидеть, отдавая время другим процессам и потокам, пока не понадобится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...