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

1 ... 30 31 32 [ 33 ] 34 35 36 ... 156


-Highest };

Класс для панели управления потоком, class ThrdCtrlPanel {

Данные управляемого потока, struct Threadlnfo {

HANDLE hThread; дескриптор потока int priority; текущий приоритет bool suspended; true, если поток приостановлен Threadlnfo(HANDLE ht, int p, bool s) { hThread = ht; priority = p; suspended = s;

Это отображение (map) содержит данные типа Threadlnfo для каждой активной панели управления потоком, static map<HWND, Threadlnfo dialogmap;

public:

Конструирует панель управления. ThrdCtrlPanel(HINSTANCE hinst, HANDLE hThrd); callback-функция панели управления.

static LRESULT CALLBACK ThreadPanel(HWND hvmd, UINT message, WPARAM wParam. LPARAM IParam) ;

Определяет статический элемент dialogmap. map<HWND, ThrdCtrlPanel::Threadlnfo ThrdCtrlPanel::dialogmap;

Создает панель управления потоком. ThrdCtrlPanel::ThrdCtrlPanel(HINSTANCE hInst, HANDLE hThrd)

Threadlnfo ti(hThrd,



GetThreadPriority(hThrd)+OFFSET, false);

Окно-владелец - рабочий стол,

UWND hDialog = CreateDialog(hInst, ThreadPanelDB , NULL,

(DLGPROC) ThreadPanel);

Помещает информацию об этом диалоговом окне в отображение тар. dialogmap.insert(pair<HWND, rhreadInfo>(hDialog, ti));

Устанавливает заголовок панели управления, char str[80] = Control Panel for Thread ; char str2[4];

itoa(dialogmap.SizeO , str2, 10); strcat(str, str2); SetWindowText(hDialog, str);

Сдвигает кс1ждый экземпляр диалогового окна. MoveWindow(hDialog, 30*dialogmap.size(),

30*dialogmap.size(),

300. 250, 1);

Обновляет значение приоритета в списке. SendDlgltertMessage (hDialog, IDD LB,. LB SETCURSEL, (WPARAM) ti.priority, 0);

Увеличивает приоритет для гарантированного управления. Выможете изменить или удалить этот оператор в соответствии с характеристиками вашей среды исполнения. SetThreadPriority (GetCurrentThread (),

THREAD PRIORITY AЮVEJOHMAL) ;

1 callback-функция диалогового окна панели управления.

ESDLT CALLBACK ThrdCtrlPanel::ThreadPanel (HWND hvmd,

UINT message, WPARAM wParam, LPARAM IParam)



int i;

HWND hpbRes, hpbSus, hpbTerm; switch (message) { case WM INITDIALOG:

Инициализирует список значений приоритета. for(i=0; i<NUMPRIORITIES; i++) { SencaDlgltertMessage (hwnd, IDD LB,

LB ADDSTRING, 0, (LPARAM) priorities[i]);

Устанавливает кнопки приостановки и возобновления потока. hpbSus = GetDlgItem(hwnd. IDD SUSPEND) ; hpbRes = GetDlgItem(hwnd, IDD RESUME) ;

EnableWindow(hpbSus, true); делает доступной кнопку Suspend EnableWindow(hpbRes, false); делает недоступной Resxme, return 1; case WM COMMAND:

map<HWND, Threadlnfo:: iterator p = dialogmap. find (hwnd);

switch(LOWORD(wParam)) { case IDD TERMINATE:

TerminateThread(p->second.hThread, 0);

Делает кнопку Terminate недоступной, hpbrerm = GetDlgItem(hwnd, IDD TERMINATE); } EnableWindow(hpbTerm, false); не доступна

Делает кнопки Suspend и Resume недоступными. hpbSus = GetDlgItem(hwnd, IDD SUSPEND); hpbRes = GetDlgItem(hwnd, IDD RESUME); EnableWindow(hpbSus, false); не доступна Suspend EnableWindow(hpbRes, false); не доступна Resume

return 1; case IDD SUSPEND:

SuspendThread(p->second.hThread);

Устанавливает состояние кнопок Suspend и Resume.



1 ... 30 31 32 [ 33 ] 34 35 36 ... 156

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