|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 4, 2003 20:30:56 Выполненяем следующий код invoke CreateThread,NULL,1000,Thread_IR,0,0,ID_Thread mov [TH],eax invoke SetPriorityClass,[hinstance],REALTIME_PRIORITY_CLASS invoke SetThreadPriority,[TH],THREAD_PRIORITY_TIME_CRITICAL invoke GetThreadPriority,[TH] _debug; преобразование еах в строку и вывод её в мессажбокс в результате уровень привелегий(приоритета) треда TH = 15. На сколько я понял функция SetThreadPriority,[TH],THREAD_PRIORITY_TIME_CRITICAL для классов с приоритетом REALTIME_PRIORITY_CLASS должна установить приоритет = 31. Но проблема в том, что SetPriorityClass возвращает ошибку. hinstance - значение возвращаемое функцией GetModuleHandle Ответьте пожалуйста в чём моя ошибка. У меня стоит Win98SE. |
|
|
Дата: Июл 5, 2003 00:11:52 В SetPriorityClass надо передавать не hInstance, а hProcess, который можно получить функцией GetCurrentProcess |
|
|
Дата: Июл 5, 2003 00:31:09 Изменил код на invoke GetCurrentProcess invoke SetPriorityClass,eax,REALTIME_PRIORITY_CLASS invoke CreateThread,NULL,1000,Thread_IR,0,0,ID_Thread mov [TH],eax invoke SetThreadPriority,[TH],THREAD_PRIORITY_TIME_CRITICAL invoke GetThreadPriority,[TH] _debug всё по прежнему. |
|
|
Дата: Июл 5, 2003 01:53:13 · Поправил: Four-F Второй вариант должен работать. Видимо GetThreadPriority возвращает 15 и ты думаешь, что не работает. Дело в том, что GetThreadPriority возвращает относительный приоритет, а не абсолютный. Для того чтобы узнать абсолютный надо вызвать GetPriorityClass и GetThreadPriority и в соответствии с этой таблицей вычислить абсолютный приоритет.
| Process Priority Class
Relative Thread Priority | Idle Below Normal Normal Above Normal High Real-Time
|---------------------------------------------------------------------
Time-critical | 15 15 15 15 15 31
Highest | 6 8 10 12 15 26
Above normal | 5 7 9 11 14 25
Normal | 4 6 8 10 13 24
Below normal | 3 5 7 9 12 23
Lowest | 2 4 6 8 11 22
Idle | 1 1 1 1 1 16
Scheduling Priorities Здесь есть еще одна таблица в другом формате, но суть та же. Если же SetPriorityClass действительно возвращает ошибку, вызови GetLastError. |
|
|
Дата: Июл 5, 2003 09:48:10 invoke SetPriorityClass возвращает 1 т.е. она вроде выполняет свою работу как надо, но приоритет по прежнему максимум 15. |
|
|
Дата: Июл 5, 2003 12:21:54 Ну дык а я про что толкую. Ты не понял. GetThreadPriority никогда не вернет тебе число болеше чем 15, потому что она возвращает не абсолютный приоритет, который ты хочеш получить, а относительный. В твоем случае это и будет 15. Но поскольку SetPriorityClass,,REALTIME_PRIORITY_CLASS у тя отрабатывает, то это относительное 15 превращается в абсолютное 31. Сходи по ссылке выше и внимательно почитай описание функций, кот ты используешь - врубишься. |
|
|
Дата: Июл 5, 2003 13:12:51 Если я правильно понял следующая конструкция invoke GetCurrentProcess invoke SetPriorityClass,eax,100h invoke GetCurrentThread invoke GetThreadPriority,eax _debug выдаст результат 0 правильно? |
|
|
Дата: Июл 5, 2003 15:45:12 Да. |
|
|
Дата: Июл 6, 2003 23:50:44 Ещё вопрос, возможно глупый, процедуры вызываемые из треда(например API) выполняются с его приоритетом? |
|
|
Дата: Июл 7, 2003 02:39:42 Разумеется. Если точнее, то процедуры не выполняются, а поток их выполняет и естественно со своим приоритетом. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.071 |