Thread procedure "грузит" процессор

Тема в разделе "WASM.WIN32", создана пользователем Spectrum, 12 дек 2005.

  1. Spectrum

    Spectrum Member

    Публикаций:
    0
    Регистрация:
    8 дек 2005
    Сообщения:
    43
    Адрес:
    Одесса
    В программе есть тред-процесс. Вообще там планируется проводиться достаточно длительные вычисления. В тестовой модели поставил несколько команд в цикле и отсылка сообщения в ProgressBar. Во время "жизни" треда Task Manager отображает большую нагрузку на приложение. Свое приложение(которое тред создало) не виснет, зато подвисают остальные.



    В чем проблема?

    Может нужно устанавливать привилегии на процесс типа (Realtime, Idle). Если да, как это сделать программно?
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    SetThreadPriority

    и попробуй вставить в цикл Sleep(0)
     
  3. Spectrum

    Spectrum Member

    Публикаций:
    0
    Регистрация:
    8 дек 2005
    Сообщения:
    43
    Адрес:
    Одесса
    Ага, отлично, попробую. Спасибо.
     
  4. serious

    serious New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    33
    Адрес:
    Russia
    Отсылай сообщения прогресс-бару через PostMessage, она асинхронная
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Spectrum



    Синхронизируй работу потока через Event-ы
     
  6. Spectrum

    Spectrum Member

    Публикаций:
    0
    Регистрация:
    8 дек 2005
    Сообщения:
    43
    Адрес:
    Одесса
    to serious

    Да, уже заметил что-то с поведением ProgressBar. Не совсем нормальное со временем:)



    to cresta

    Sleep(0) - попробовал - результат есть. Правда, с представлением работы функции не совсем разобрался. В справке АПИ написано о задержке и ноль в этом случае - бесконечная задержка? Ладно, разберусь.



    to _DEN_

    В некоторых вещах я совершенный невежда. Eventы? Что есть это?
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Spectrum



    Посмотри юзание OpenEvent, CreateEvent, SetEvent и WaitForSingleObject.
     
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Для Sleep задержка будет бесконечность, если значение INFINITE (-1)

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

    Spectrum Member

    Публикаций:
    0
    Регистрация:
    8 дек 2005
    Сообщения:
    43
    Адрес:
    Одесса
    to cresta

    Да, спасибо, с Progressbar уже все хорошо работает.

    Sleep - ясно.



    _DEN_

    Events

    Уже посмотрел.



    С приоритетами там еще не слишком понятно. Чересчур дискретно меняются.



    За советы спасибо.