Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
By byte (8-битовое целое без знака)
Содержание книги
- Структура классов ППП для решения задач оптимизации
- virtual void function() = 0;. class CAbstractProblem. чисто виртуальная функция. class CRealProblem: public CAbstractProblem. входные данные задачи. конструктор. деструктор. функции доступа к переменным класса. class CAbstractResult. чисто виртуальная фун
- Решение задач лп с помощью пакета ilog OPL Studio
- sum(j in Products) a[i,j]*x[j]>=b[i];
- forall(i in Parameters : i <> Calories)
- Тестирование программного обеспечения
- Тестирование в итеративном жизненном цикле проекта
- Принципы поиска ошибок при тестировании
- Проверка в нормальных условиях предполагает тестирование на данных, которые характерны для реальных условий функционирования программы.
- Дж. Шеферд. Программирование на Microsoft VIsual C++. Net
- Система, управляемая сообщениями
- By byte (8-битовое целое без знака)
- h дескриптор (handle) - обычно DWORD
- quot;SubSystem"->"/SUBSYSTEM:WINDOWS" или "/SUBSYSTEM:CONSOLE"
- Include "windows. H". Lresult callback windowproc(. Lparam lparam). Paintstruct PS;. HDC hdc;. Char lpszhello[]="hello, World. ";. Switch (wmessage). HDC = beginpaint(hwnd, &ps);. Rect RT;. Getclientrect(hwnd, &rt);. Amp;rt,dt_
- Подготавливаем данные класса окна и регистрируем его
- LPARAM lParam; // конкретный смысл которой зависит от
- Регистрация класса окна и Создание окна
- BOOL InitInstance(HINSTANCE hInstance, int nCmdShow,
- Оконная процедура регистрируется в системе и вызывается всякий раз, когда Windows выполняет какую-либо операцию над окном приложения.
- GetClientRect(hWnd, &rt);. DrawText(hdc,lpszHello,strlen(lpszHello),&rt,DT_LEFT);. EndPaint(hWnd, &ps);. case WM_DESTROY: PostQuitMessage(0); break;. return DefWindowProc(hWnd,wMessage,wParam,lParam);. return 0;
- Общие сведения о сообщениях Win32
- Аппаратные (входные данные от мыши, клавиатуры и таймера);
- Список (list Box) –элемент отображения списка элементов, позволяющий пользователю выбрать один или несколько из них.
- пиктограммы (icons) – битовые массивы, использующиеся для визуального представления различных объектов в системе.
- CCmdTarget - базовый класс для всех объектов, которые могут получать и отправлять сообщения.
- Шаг2. Выбираем «An empty project»
- Макросы-компоненты карты сообщений
- afx_msg void OnLButtonUP(UINT nFlags, CPoint point);
- Nmhdr *pnotifystruct, //указатель на структуру с данными
- Посылает сообщение в объект класса cwnd или его потомка, непосредственно вызывая оконную процедуру, и не выходит из нее, пока та не обработает сообщение;
- strMessageText.Format("Error number %d", nError);
- Архитектура «Документ-представление» и MDI-приложения
- HMENU CMDIChildWnd::m_hMenuShared
- дескриптор меню, ассоциированного с окном “MDI child”.
- CDocument* CView:: GetDocument()
- Динамическое создание с помощью конструктора
- virtual POSITION CDocument::GetFirstViewPosition()
- Класс шаблона cdoctemplate в приложении отвечает за взаимодействие документов, их представлений и фреймов. В MDI приложении используется его потомок cmultidoctemplate.
- CMultiDocTemplate* pDocTemplate;
- CFrameWnd* pFrame,CDocument* pDoc, BOOL bMakeVisible=TRUE);
- POSITION CWinApp::GetFirstDocTemplatePosition()
- Документ, связанный с активным представлением
- AFX_THREADPROC pfnThreadProc, // Глобальная функция потока
- UINT Msg, // идентификатор сообщения
- Solver* pSolver; //Solver to use
- virtual CDocument* CFrameWnd::GetActiveDocument()
- SendMessage(WM_COMMAND,ID_FILE_SAVE,0);
- while (::GetMessage(&msg, NULL,0,0))
- Объекты, объявленные как volatile, не подвержены оптимизации и временному хранению в регистрах, но читаются и записываются каждый раз напрямую в память.
Процессы
Прежде, чем переходить к программированию, рассмотрим механизм вытесняющей многозадачности в Win32.
Процесс – экземпляр программы, загруженной на выполнение.
Процесс состоит из двух компонентов: 1. объекта ядра, через который ОС управляет процессом, и где она хранит статистическую информацию о процессе, 2. адресного пространства, в котором содержится код и данные всех EXE и DLL- модулей. Именно в нем находятся стеки и прочие динамически выделяемые участки памяти.
Процессы инертны. Чтобы процесс что-нибудь выполнил, в нем нужно создать поток.
Поток (нить, thread) – это «путь», по которому проходит система, выполняя программный код.
При запуске приложения система создает и процесс и поток, т.к. каждый процесс должен иметь хотя бы один поток. Пример – Microsoft Internet Explorer (долго загружается первый экземпляр, но все последующие – значительно быстрее, т.к. процесс уже создан, а новые потоки в этом процессе создаются быстро). Если один процесс имеет несколько потоков, каждый из них должен иметь собственный набор регистров и стек.
Чтобы все процессы работали, ОС отводит каждому из них определенное процессорное время. При распределении процессорного времени в Win32 поток может находиться в одном из следующих состояний:
· Выполнение
· Ожидание (поток готов к выполнению и ожидает предоставления ему процессора)
· Блокировка (ждет какого-либо внешнего события или сообщения для перехода в «Ожидание»)
В ы п о л н е н и е
↕ ↓
Ожидание ← Блокировка
Для реализации такой модели многозадачности требуется очередь ожидающих потоков (упорядоченных по приоритету и моменту поступления в очередь) и список заблокированных потоков. Каждый поток выполняется на процессоре до истечения кванта времени. При появлении в очереди потока с более высоким приоритетом, чем у выполняющегося, данный поток немедленно уступает процессор более высокоприоритетному. Примеры низкоприоритетных потоков: мониторинг системы, фоновая печать, разбивка документа на страницы. Примеры высокоприоритетных потоков: диалог «Завершение работы программы» (по Ctrl+Alt+Del), программы, связанные со внешней аппаратурой (модемы, дисководы и т.д.).
Квант времени – промежуток времени, выделяемый операционной системой для работы потока. Слишком малое значение к.в. приводит к большим накладным расходам на переключение между потоками. Слишком большое значение – к задержкам реакции на внешние события или сообщения.
Если во время выполнения поток инициирует ожидание некоторого события, операционная система заблокирует поток и освободит процессор для первого потока из очереди ожидающих.
Роль состояния «блокировка» - в освобождении процессора, когда он не требуется для данного процесса. Пример неудачного (активного) ожидания:
while(bStillWriting);
Примером блокировки потока может служить ситуация, когда во время выполнения поток инициирует ожидание очередного сообщения.
Windows 2000 в полной мере использует возможности машин с несколькими процессорами: она способна закрепить каждый поток за своим процессором, и тогда потоки могут выполняться действительно параллельно. Windows 98 работает только с одним процессором. Даже если машина имеет n процессоров, n-1 из них будут простаивать, пока работает Windows 98.
Венгерская нотация
Одна из традиций, поддерживаемых программистами под Windows – так называемая венгерская нотация (введенная Charles Simonyi) в объявлении идентификаторов. Здесь принято перед смысловой частью имени переменной (например перед «IterationCounter») ставить префикс на нижнем регистре, по которому можно понять тип переменной (например «iIterationCounter» для целочисленного счетчика итераций).
Стандартные префиксы:
c char
|