Только Один REALTIME поток в процессе - такое возможно?

Тема в разделе "WASM.WIN32", создана пользователем ubil, 13 май 2006.

  1. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Привет всем!

    Тут у меня возник вопрос:

    Например, мне нужен в UserMode REALTIME-поток; чтобы сделать такой приоритет данному потоку, я должен сначала установить класс приоритетов для всего процесса в котором выполняется поток, а потом уже установить отностительный приоритет для потока(TIMECRITICAL=31, например). Но ведь при этом весь процесс становится REALTIME, и если в нем другие потоки будут сильно активными, то они жестко затормозят систему... И вот вопрос, собственно, можно ли как-нибудь сделать так, чтобы только 1 поток был REALTIME.TIMECRITICAL, а все остальные - NORMAL.NORMAL? Выносить поток в отдельный процесс нежелательно, т.к. поток использует данные из исходного процесса(разве что если можно как-нибудь создать процесс, который будет разделять с ним одно адресное пространство...).
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ubil



    По умолчанию, все потоки имеют именно такой приоритет. Если хотите, можете даже понизить приоритет. Потоки ваши - делайте с ними что хотите.
     
  3. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Вы не поняли, наверное... У меня имеется один процесс и в нем n потоков, мне нужно 1 из них сделать REALTIME, но при этом остальные оставить NORMAL. НО чтобы сделать поток реалтайм, нужно сначала вызвать функцию SetPriorityClass, которая повысит приоритет всех потоков в моем процессе до REALTME.NORMAL, а потом вызвать SetThreadPriority, которая может повысить приоритет данного потока до REALTIME.TIMECRITICAL. Но мне не нужно делать все потоки в моем процессе REALTIME.XXX, желательно их оставить NORMAL.NORMAL все, кроме одного...
     
  4. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    а смысл? С таким приоритетом мышка "замерзнет", если поток сильно будет напрягаться...
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Ясно. Реалтаймовый поток в идеале должен быть единственным не только в процессе, но и в системе. В документации советуют присваивать риалтаймовость лишь на короткие промежутки времени. Если следовать этому совету, то приоритет остальных потоков в процессе не будет иметь особого значения.
     
  6. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Так вот этот поток у меня находится постоянно в состоянии ожидания сигнала, так что мышка не замерзает. Пока сейчас в моем процессе нет больше других "трудящихся" потоков, вот я сейчас и думаю что буду делать когда они появятся... Скорее всего придется поместить его в простенькую прожку и запускать ее из дгугого процесса... Но это гемор какой-то, почему это не может быть в одном процессе и NORMAL и REALTIME потоки???
     
  7. iramoscow

    iramoscow New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2004
    Сообщения:
    13
    Установи максимаольный приоритет процессу и сделай нужный поток REALTIME. Если ты грамотно проектируешь приложение, то оно не будет жрать ресурсы даже в REALTIME. Поробуй выставить любому приложению данный приоритет и посмотри что будет.
     
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Евсколько я понимаю, реалтайм будет только тот поток, для которого была вызвана апи установки приоритета. Иначе смысла не было бы в существовании SetThreadPriority, т.к. установка приоритета процесса автоматом бы устанавливала приоритет потоков. Но раз функция существует, значит автоматом приоритеты потоков не устанавливаются.