Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2013, 19:38   #1
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию Вопрос про время

В общем, есть 3 потока (на моем двух ядерном компе), первые 2 потока суммарно грузят мой процессор на 100%, ихний приоритет Высокий.
Первые 2 потока должны остановиться через 60 секунд после старта.
В третьем потоке с приоритетом реального времени идет подсчет времени с начала работы, таким методом:

Код:
var
  ST, Fr, T: Int64;
begin
  TimeCount:=0;
  QueryPerformanceFrequency(Fr);
  QueryPerformanceCounter(ST);
  while True do begin
    Sleep(1000);
    QueryPerformanceCounter(T);
    TimeCount:=Floor((T-ST) / Fr);
  end;
Но как не странно, потоки освобождаются через 54 секунды.
В первых двух потоках такая проверка:

Код:
  
while TimeCount<TestTime do begin

Последний раз редактировалось KoBRaAndrey; 20.06.2013 в 19:56.
KoBRaAndrey вне форума Ответить с цитированием
Старый 20.06.2013, 19:58   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не скажу из-за этого ли, но сам факт того, что в одном потоке пишем в TimeCount, в другом читаем и без всякой синхронизации наводит на размышления. Да и Sleep(5000) 5 секунд точности никогда не даст, не важно какой приоритет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.06.2013, 20:01   #3
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

5000 это было раньше, я уже исправил на 1000. По идеи, с 5000 должно было выходить более чем 60 секунд..но нет.
Переменные вроде можно изменять и читать без синхронизации, не так ли?
KoBRaAndrey вне форума Ответить с цитированием
Старый 20.06.2013, 20:04   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Переменные вроде можно изменять и читать без синхронизации, не так ли?
Вообще-то нельзя

ADD

Зачем вообще третий поток не понял. Можно просто тики в первых двух потоках брать и выходить при необходимости. Будет вполне норм.результат
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.06.2013 в 20:15.
Аватар вне форума Ответить с цитированием
Старый 20.06.2013, 20:14   #5
KoBRaAndrey
Форумчанин
 
Регистрация: 01.10.2009
Сообщений: 302
По умолчанию

Как тогда работать синхронизировано с переменными? Приходит в голову только синхронизация процедуру с изменением глобальной переменной на локальную..
KoBRaAndrey вне форума Ответить с цитированием
Старый 20.06.2013, 22:40   #6
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

-TTimer.
-Не, не слышал.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про Свойство Visible и про иконки в imagelist Kappi4 Компоненты Delphi 2 21.05.2010 13:10
Про время активности форума goblinyara Свободное общение 4 22.01.2009 21:07
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
Переформулирую вопрос про время процессов student_63 Win Api 7 14.04.2008 10:34
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24