Программирование >>  Формирование пользовательского контейнера 

1 ... 34 35 36 [ 37 ] 38 39 40 ... 156


IDD LB, LB GETCURSEL, О, 0);

SetThreadPriority(p->second.hThread,

p->second. priority-OFFSET);

return 1;

Обработка списков порождает разнообразные уведомляющие сообщения (notification message), точно описывающие тип происшедшего события. Такие сообщения хранятся в старшем слове параметра wParam. Один из типов уведомляющих сообщений носит имя lbn dblclk, которое означает двойной щелчок кнопкой мыши по элементу списка. Когда такое уведомление получено, извлекается индекс элемента списка с помошью Windows API-функции sendDigitemMessageo, использующей Текущее выделение в списке. Полученное значение индекса применяется для установки нового приоритета потока. Обратите внимание на то, что переменная offset вычитается для нормализации извлеченного значения индекса.

В конце концов, когда пользователь закрывает панель управления, посылается сообщение idcancel. Оно обрабатывается приведенной далее последовательностью кода.

case IDCANCEL:

Если поток приостановлен, когда панель зак£жтается,

возобновляет поток, чтобы предотвратить возникновение тупика.

i f(p->second.suspended) {

ResumeThread(p->second.hThread); p->second.suspended = false;

Удаляет этот поток из списка, dialogniap.erase(hvmd);

Закрьшает панель. DestroyWindow(hwnd); retixm 1;

Если поток был приостановлен, он возобновляется. Это необходимо для исключения возможной тупиковой ситуации или взаимной блокировки потоков. Далее удаляется связанный с этой панелью элемент в отображении dialogmap. В заключение диалоговое окно закрывается с помощью Windows API-функции DestroyWindow ().



fUOronOT04HOCTb

Демонстрация работы панели управления потоком

в листинге 3.2 приведен код программы, включающей в себя панель управления и пример ее использования. Пример вывода программы показан на рис. 3.2. Программа создает главное окно и определяет два дочерних потока. После запуска программы в этих потоках происходит подсчет суммы целых чисел от О до 50 ООО и вывод текущих значений счетчиков в главном окне. Управлять дочерними потоками можно, активизируя их панели управления.

Начните выполнение программы с запуска потоков с помощью команды Threads I Start Threads (Потоки Запуск потока) (или нажатием клавиши <F2>) и активизации панелей управления потоками с помощью команды Threads Control Panels (Потоки Панели управления) (или нажатием клавиши <F3>). После того как панели запушены, вы можете менять приоритеты потоков и т. д.

Threads Help

UsingaThr-чc

Thread 1: loop 123132 Thread 2: loop Й190475

Change State Thread Priority

Terminate j

Resume j

Lowest

Normal Above Normal Highest

Change State Terminate

H I [Highest

Thread Riority

Lowest Below Normal lo,

Рис. 3.2. Вывод программы, демонстрирующей работу панелей управления

Примечание

В задачу этой книги не входит обучение программированию в операционной системе Windows, но функционирование предлагаемой демонстрационной программы настолько очевидно, что будет понятно всем программистам, работающим в этой операционной системе.



#include <windows.h> #include <process.h> #include thrdapp.h #include tcp.cpp

const int MAX = 500000;

LRESULT CALLBACK WindowFunc(HWND, UINT. WPARAM, LPARAM);

imsigned stdcall MyThreadKvoid * param);

imsigned stdcall MyThread2 (void * param);

char str[255]; содержит строки вывода

unsigned tidl, tid2; . идентификаторы потоков (ID) HANDLE hThreadl, hThread2; дескрипторы потоков

HINSTANCE hInst; дескриптор экземпляра приложения int WINAPI WinMain (HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR args, int winMode)

HWND hvmd; MSG msg; WNDCLASSEX wcl; HACCEL hAccel;

Определяет оконный класс (window class). wcl.cbSize = sizeof(WNDCLASSEX);

wcl.hlnstance = hThisInst; дескриптор для этого экземпляра wcl. IpszClassName = MyWin ; имя класса окна wcl.IpfnWndProc = WindowFunc; функция окна (window function) wcl.style =0; текущий стиль

wcl.hlcon = LoadlconCNULL, IDI APPLICATION); большая пиктограмма wcl.hlconSm = NULL; использует уменьшенную версию большой пиктограммы

Листинг 3.2. Демонстрация работы панели управления потоком



1 ... 34 35 36 [ 37 ] 38 39 40 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика