Объекты, объявленные как volatile, не подвержены оптимизации и временному хранению в регистрах, но читаются и записываются каждый раз напрямую в память. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объекты, объявленные как volatile, не подвержены оптимизации и временному хранению в регистрах, но читаются и записываются каждый раз напрямую в память.

Поиск

Объекты, объявленные как volatile, не подвержены оптимизации и временному хранению в регистрах, но читаются и записываются каждый раз напрямую в память.

 

С помощью такого флага мы и будем осуществлять взаимодействие потоков. В класс решателя для этого нужно добавить общедоступную булевскую переменную-флаг требования экстренной остановки по <Esc>. Например,

public: BOOL volatile bStopNow;

 

Перед запуском потока в функции OnSolveThis нужно установить этот флаг FALSE, а в OnEscape – переключить его в TRUE. В главном цикле решателя на каждой итерации необходимо проверять значение этого флага, и если только он стал TRUE – запустить исключение с кодом ошибки, означающим экстренный выход по требованию пользователя.

 

Вывод результатов вычислений в дочернее окно

 

Займемся теперь наполнением функции-обработчика OnThreadFinished.После того как наш решатель задачи из файла закончил свою работу, полученные результаты следует вывести в новое дочернее окно.Для вывода текста в окно-представление CEditView мы воспользуемся следующей функцией:

 

void CWnd::SetWindowText(LPCTSTR lpszString);

Помещает указанную строку lpszString(указатель на объект CString или массив символов, оканчивающийся нулем)в заголовок окна, если таковой имеется. Если это окно – элемент управления, то задается его текстовое содержимое(конкретный смысл зависит от элемента управления). В любом случае данная функция отправляет сообщение WM_SETTEXT в указанное окно, и дальнейшие действия зависят от специфики обработчика WM_SETTEXT. В случае CEditView содержимое строки помещается в окно-представление для просмотра и редактирования.

Листинг 5.                                                                                                                                

LONG CChildFrame::OnThreadFinished(UINT wParam, LONG lParam)

{



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 49; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.005 с.)