Практикум по курсу "Системное программное обеспечение": Учебное пособие (Программа курса, методические указания к изучению дисциплины, содержание и методические рекомендации к выполнению контрольной работы), страница 10

Вопрос: В каком режиме работы программы потоку удастся вывести задуманное число прямоугольников за один цикл активности?

Ответ: в режиме взаимного исключения.

Задание 3.

Задача: Модифицировать программу Threads таким образом, чтобы появлялся  ровно 1 прямоугольник в секунду в случайно выбранном дочернем окне.

Решение: Одним из возможных решений является отказ от многопоточного рисования, поскольку в пределах одного потока легче управлять временем. Таким образом, потребуется следующая модификация кода.

1. Отключение рисования дочерними потоками проще всего выполнить комментирование вызовов DrawProc из функции StartThread. Правда, это приводит к непроизводительному расходу ресурсов ПК, так как дочерние потоки продолжают работать «в пустую». Зато не надо заботиться об отключении всех пунктов меню, относящихся к потокам и последовательному удалению всех упоминаний о дочерних потоках из программы. 

LONG StartThread ( LPVOID lpThreadData )

{

    DWORD *pdwThreadID;     // pointer to a DWORD for storing thread's id

    DWORD dwWait;           // return value from WaitSingleObject

    pdwThreadID = lpThreadData;      // retrieve the thread's id

    while( ! bTerminate )                     // continue until bTerminate == TRUE

    {

        if( bUseMutex )

        {                                                           // draw when this thread gets the mutex

            dwWait = WaitForSingleObject( hDrawMutex, INFINITE );

            if( dwWait == 0 )

            {

//                DrawProc( *pdwThreadID );

                ReleaseMutex( hDrawMutex );

            }

        }

        else                                            // not using mutex; let the thread draw

 //           DrawProc( *pdwThreadID );

    }

    return( 0L );                                   // implicitly calls ExitThread()

}

2.  Выставить число прямоугольников в одном цикле DrawProc равное 1.

iTotal = 1;

3. Включить рисование в обработчик таймера. Выбирать окно случайным образом.

void Main_OnTimer ( HWND hWnd, UINT uTimerID )

{

        DrawProc((int)( rand() % 4 ));

UpdateListBox();      // update the data shown in the listbox

    return;

}

4. Удостовериться в том, что таймер срабатывает каждые 1000 милисекунд.

    uRet = SetTimer( hWnd, TIMER, 1000, NULL );

Полученная в результате модификации программа большую часть времени бездействует. Раз в 1 с появляется прямоугольник в случайном окне, случайного цвета и расположения. Информация о появлении нового прямоугольника немедленно отражается в окне-списке.


6.  Рекомендуемая литература

6.1 Основная литература

1.  Марапулец Ю.В. Операционные системы. П.-Камчатский: КамчатГТУ, 2008.

2.  Карпов В.Е., Коньков К.А.Основы операционных систем. Интернет-университет информационных технологий - ИНТУИТ, http://www.intuit.ru/department/os/osintro/, 2011.

6.2 Дополнительная литература

3.  Таненбаум Э., Вудхалл А. Операционные системы. Разработка и реализация. Классика CS. 3-е изд. СПб.: Питер, 2007.

4.  Олифер В.Г., Олифер Н.А. Сетевые операционные системы. СПб.: Питер, 2006.

5.  Опалева Э.А. Языки программирования и методы трансляции / Э.А. Опалева, В.П. Самойленко. – СРб.: БХВ-Петребург, 2005.

6.  Свердлов В. А. Языки программирования и методы трансляции : учеб. пособие. – СПб. : Питер, 2007.

7.  Гордеев А.В. Операционные системы : учебник. – СПб : Питер, 2007.

8.  Соломон Д., Русинович М. Внутреннее устройство Windows 2000. СПб.: Питер, 2004 г.

9.  Финогенов К.Г. Win32. Основы программирования. М.: Диалог-МИФИ, 2002.

10.Гук М. Аппаратные средства IBM PC. - СПб.: Питер, 2000 г.

11.Щупак Ю.А. Win32 API. Эффективная разработка приложений. С.-Пб.: Питер, 2007.

12.Харт Джонсон М. Системное программирование в среде Windows. – М.: Вильямс, 2005.

13.Куприянов А.И. Основы защиты информации : учеб. пособие / А.И. Куприянов, А.В. Сахаров, В.А. Швецов. – 3-е изд., стер. – М. : Академия, 2008.