ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
158
ЛАБОРАТОРНЫЕ РАБОТЫ
Лабораторная работа №1
Разработайте программу, запускающую несколько потоков.
Каждый поток должен последовательно в цикле увеличивать значение некото-
рой глобальной переменной, Затем производить с ней некоторые достаточно ресур-
соемкие вычисления, а затем – восстанавливать значение глобальной переменной и
отображать ее на экране. Очевидно, что на экране должны появиться одинаковые
значения, равные начальному значению глобальной переменной.
Глобальная переменная должна быть общая для всех потоков.
Для отображения значения глобальной переменной удобно воспользоваться
компонентом ListBox – списком. Поместите список на форму и свяжите его с объек-
том типа CListBox (категория Controls).
Класс CListBox имеет следующие удобные методы.
void AddString (char* Str) – добавляет строку Str в список
void ResetContent() – очищает список.
Список может автоматически сортировать элементы, если установить галку
Sort в свойствах списка.
Чтобы быстро скопировать компонент можно, выделив его, скопировав
(Ctrl+C) и вставив из буфера (Ctrl+V). При этом скопируются и все его свойства.
Для эмуляции сложных вычислений можно воспользоваться системной
функцией задержки
Sleep
:
void Sleep(int Time)
где
Time
– величина задержки в миллисекундах. В результате вызова этой
функции потоку не будет выделяться квантов времени в течении
Time
миллисекунд.
Например, текст функции, реализующей поток, может выглядеть так:
int GlobalCounter=100;
DWORD __stdcall Thread(void* Param)
{
CListBox *List=(CListBox*)Param;
for(int i=0;i<20;i++)
{
GlobalCounter++;
Sleep(100);
GlobalCounter--;
char S[20];
sprintf(S,"C=%i",GlobalCounter);
List->AddString(S);
}
return 0;
}
1...,150,151,152,153,154,155,156,157,158,159 161,162,163,164,165,166,167,168,169,170,...180