Вопрос: В каком режиме работы программы потоку удастся вывести задуманное число прямоугольников за один цикл активности?
Ответ: в режиме взаимного исключения.
Задача: Модифицировать программу 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.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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.