Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi

Ответить
Настройки темы
Delphi - Delphi

Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


в программе я провожу статические расчеты и нужно выполнять множество математических действий, которые компьютер порой не очень то переваривает, так вот я хотел узнать как в Delphi5 можно установить приоритет программы таким образом, чтобы она использовала все ресурсы компьютера... чтобы максимально минимизировать время работы программы, то есть расчетов

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 17:31, 10-11-2002

 
Kamiur


Сообщения: n/a

Профиль | Цитировать


SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS); - это устанавливается максимально возможный приоритет процесса в целом,
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL); - это приоритет потока.
Как ни странно, главное при установке приоритетов - не переборщить, ведь виндоусу себя тоже считать надо, и если своему потоку (тем более интенсивно работающему) выставить максимальные приоритеты, то виндоус практически зависнет.

Отправлено: 01:04, 11-11-2002 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


Kamiur

Цитата:
виндоус практически зависнет.
Самое главное это чтобы расчеты проводились и если компьютер выйдет из подвешенного состояния после завершения работы программы, то это на данный момент, что мне нужно, можешь подробнее расказать как пользоваться приведенными процедурами, а то как-то методом тыка не очень хочется их осваивать, а справку на английском прочитать проблемно... было бы здорово если бы был живой примерчик...

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 06:22, 11-11-2002 | #3

Kamiur


Сообщения: n/a

Профиль | Цитировать


Хм... Да так прямо и пользоваться.
Ну например...

var PriorityClass, Priority: Integer;
...
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
// Сохранение приоритетов по умолчанию, чтобы можно было потом восстановить
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
//Установка приоритета текущего процесса
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
//Установка приоритета текущего потока
...  Ваши вычисления ...
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
// Восстановление приоритетов по умолчанию

Ну а насчет справки - это вы зря: раз уж вы взялись что-то программировать, то английский, imho, это первое, что надо освоить...


Добавлено:

Да, и еще... Если операционка NT (2000, XP), то у пользователя, запускающего такую программу, конечно, должны быть соответствующие права (называется, по-моему, "Профилирование одного процесса".

Отправлено: 11:11, 11-11-2002 | #4


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Roman Go
Kamiur
Привилегия увеличения квот должна быть.
Если ее нет - приоритет будет только высокий, но не реального времени.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 17:13, 11-11-2002 | #5


Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


vasketsov Я лично из твоих слов как обычно ничего не понял, может разъяснишь по подробнее, мне что не следует и браться за эту штуку или нужно таки что-нибудь другое использовать...?

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 03:57, 12-11-2002 | #6

Kamiur


Сообщения: n/a

Профиль | Цитировать


Ну уж если тут действительно все так не просто, то пишите под ДОС (и на фортране), там проблем с многозадачностью нет в принципе.

Отправлено: 11:05, 12-11-2002 | #7


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Roman Go
Да забей.
Бери класс приоритета как высокий, реалтайм не нужен, думается.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 15:28, 12-11-2002 | #8


Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я значит что делал: в предложенный код Kamiurа вставлял вот такой цикл
Код: Выделить весь код
 
 for i:=1 to 10000 do
       for j:=1 to 1000 do
         for q:=1 to 1000 do
           begin end;
и засекал время работы, у меня получалось 30 секунд,
Код: Выделить весь код
label1.caption:='в процессе';
t:=time;//самое начало модуля
{- - - - - - - - - - -}
label1.caption:='конец';
label2.caption:=timetostr(t-time);//самый конец модуля
потом такой же цикл запускал, но уже без данного кода и получил те же 30 секунд, то есть реального выигрыша я никакого не получил, хотя при использовании предложенного кода приоритет работы моей программы действительно был высоким так как я даже на пуск в течение 30 секунд нажать не мог (во время работы программы) в отличие от работы без установления приоритета


заодно вопрос, почему я в label1 не вижу в течении этих же самых 30 секунд в процессе и как мне сделать чтобы я его видел... странно как-то это все работает, не по порядку..

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 12:08, 24-12-2002 | #9


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Roman Go
Цитата:
почему я в label1 не вижу в течении этих же самых 30 секунд в процессе
Потому как сообщения о перерисовке не обрабатываются, что это было так, вызывай в цикле Application.ProcessMessages, примерно 10 раз в секунду будет достаточно, то есть, в самом внутреннем цикле лучше этого не делать.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 15:48, 25-12-2002 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - Delphi | UpperCase на Delphi 7 Cognolio Программирование и базы данных 3 26-01-2006 15:42
Delphi - C++ vs Delphi BigMac Программирование и базы данных 76 13-01-2004 09:54
Delphi - Delphi Surround Программирование и базы данных 11 10-01-2004 22:13
Delphi - Delphi Zx Программирование и базы данных 3 27-08-2003 10:19
Delphi - Delphi Roman Go Программирование и базы данных 11 11-12-2002 14:43




 
Переход