|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.03.2019, 10:00 | #1 |
Форумчанин
Регистрация: 07.01.2015
Сообщений: 231
|
Приоритеты потоков
Управление потоками
Цель работы: исследовать значение приоритета потоков для их синхронизации в системе с псевдопараллельным режимом работы. Задание1. Разработайте программу сортировки чисел. Программа должна удовлетворять следующим требованиям:-Должны быть реализованы процедуры сортировки пузырьком, вставкой, и быстрой сортировки.-Размер выборки для сортировки должен задаваться пользователем.-Должен быть реализован режим отрисовки процесса сортировки.-Пользователь должен иметь возможность замедлять и останавливать сортировку.-Все три сортировки должны работать одновременно и над одинаковым набором входных данных. -Каждая сортировка должна отрисовываться в отдельном окне.Для отрисовки сортировки можно использовать вызов SetPixel: перед обменом местами двух элементов сначала стираем соответствующие точки, закрашивая их цветом фона, а после обмена –рисуем заново. Вызов SetPixelтакже играет роль небольшой задержки во времени.Поскольку размер выборки будет меняться, целесообразно использовать динамические массивы. Для этого используйте операторы newи delete.Для задания начальных значений используйте генератор случайных чисел rand(): он возвращает значение от 0 до MAX_RAND. Как создать новое окно? Окно проще всего создать на основе шаблона –ресурса окна. Для добавления нового шаблона выберите вкладку Resources, выберите раздел Dialog, кликните на нем правой кнопкой мыша и выберите Newdialog. Добавится новый шаблон диалога с идентификатором IDD_DIALOGxxx, где ххх –некоторое число.Теперь в основной программе надо объявить переменную типа Cdialog, и вызвать метод Createдля его инициализации, а затем –метод Showдля отображения на экране:CDialog MyDialog;MyDialog.Create(идентифика тор ресурса диалога);MyDialog.ShowWindow(SW_SHO W);Чтобы окно не исчезло сразу после выхода из функции, переменную MyDialogнадо сделать глобальной, а метод Createвызывать в функции OnInitDialogглавного окна.Для изменения размера окна и положения на экране используйте метод MoveWindow.Для визуализации сортировки можно воспользоваться функцией SetPixel. Для этого перед изменением любой ячейки массива соответствующую точку необходимо стереть, закрасив цветом фона, а затем, после внесения изменений, нарисовать заново. Для получения цвета фона можно воспользоваться функцией GetPixel. Примерный вид интерфейса показан на рисунке. Задание 2. Установите приоритет каждого потока. Приоритет потока устанавливается при помощи функции SetThreadPriority:SetThreadPriority (дескриптор_потока, величина_приоритета);Дескриптор потока –величина типа HANDLE,возвращаемая при вызове CreateThread.Величина приоритета может принимать значения 0, +-1, +-2, +-15.Попробуйте определить самостоятельно, что происходит при установке того или иного приоритета. Попробуйте также определить значения приоритета, вызывающие синхронное окончание работы сортировок. |
22.03.2019, 10:39 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
И? Какую цель вы преследовали копи-пастя сюдя свое ДЗ?
|
22.03.2019, 10:50 | #3 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,620
|
Дык он во фриланс хотел, ошибся разделом.
Пора, пора на форуме заводить раздел "Халява, сэр!" |
20.11.2019, 07:14 | #4 |
Пользователь
Регистрация: 14.03.2011
Сообщений: 14
|
Решил не создавать новую тему, а написать сюда.
Имеется несколько таймеров, каждый из которых выполняет большое количество действий и с малым интервалом, иногда такое приложение подвисает. Можно для каждого таймера создать поток с высоким приоритетом. Например, для двух таймеров: Код1: Код:
Код2: Код:
|
20.11.2019, 09:07 | #5 | |||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
Цитата:
Цитата:
Я бы их на основе CreateWaitableTimer сделал, типо такого Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|||
20.11.2019, 09:15 | #6 | |||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
предложенный вариант(от TC) НЕ спасет от зависания.
Цитата:
а то что блокирует Цитата:
никакая реакция формы НЕВОЗМОЖНА ровно до тех пор пока не выполниться дейстие(-я). Цитата:
Код:
повтор действий и так уже есть(while...). и даже чаще чем нужно. хотя быть может и реже, но по крайней мере так часто как возможно. но есть "небольшая" ложка дегтя, если действия затрагивают форму. Поток для общения с VCL(формы и все видимое что на них может быть) должен использовать Synchronize (что это такое есть много на форуме, это первое что говорят услышав про потоки) и чем это плохо тоже есть. А если мы хотим чтобы потоки в таком разе не мешали реакциям формы, они(потоки) должны будут иметь МЕНЬШИЙ приоритет.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 20.11.2019 в 09:19. |
|||
21.11.2019, 01:48 | #7 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Приоритеты | _Milana_ | Общие вопросы по Java, Java SE, Kotlin | 2 | 12.01.2012 17:06 |
Приоритеты | _Milana_ | Помощь студентам | 2 | 12.01.2012 14:37 |
Приоритеты потоков | Soundkilla | Помощь студентам | 1 | 24.04.2011 19:37 |
приоритеты в GPSS | severin | Помощь студентам | 0 | 18.12.2009 12:57 |
Приоритеты. | Geg[C/c++] | Помощь студентам | 1 | 12.03.2009 19:18 |