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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2011, 14:10   #1
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
Стрелка Стабилизация работы потока(TThead)

зделал бегущую строку в отдельном потоке, но она не бегает с одинаковои скоростью, как ето можно стабилизировать
Код:
  RunString := TRunString.Create(True);
  RunString.FreeOnTerminate := True;
  RunString.Priority := tpNormal;

procedure TPlayer.Execute;
begin
  inherited;
  while True do
  begin
    Label1.Left := Label1.Left - 1;
    if Label1.Left < -Label1.Left then Label1.Left := Panel1.Width;
  end;
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 18.03.2011, 14:17   #2
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Вариант 1 (бредовый):
При старте потока создавать окно посредством CreateWindows, регистрировать таймер на это окно и, собсна, по событию таймера передвигать строку.

Вариант 2:
В основном потоке регистрировать таймер на основную форму и по таймеру передвигать строку.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 18.03.2011, 14:22   #3
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

бегущая строка через таимер мне не подходит
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 18.03.2011, 14:30   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Не подходит даже первый вариант? Тогда мирись с нестабильностью. Установить фиксированое время процессора для конкретного потока (насколько я знаю) не возможно.

Да и чем плохи таймера? Таймер - это по сути только обработчик оконных сообщений от ОС. Если уж и ОС висит жестко, то и распределение времени процессора тебе не поможет...
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 18.03.2011, 14:36   #5
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

а как можно бороца с тем что у меня загузка процессора во время потока(любого которыи я создаю) 50 -70
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 18.03.2011, 14:38   #6
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

в конце поставь
Код:
Sleep(10);
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 18.03.2011, 14:40   #7
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

ето приостановит процес, а я хочу что б он не загружал проц во время работы, если ето возможно
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 18.03.2011, 14:41   #8
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Попробуй сначала. При остановке потока процессор на время перестает егообрабатывать - тем самым снижается его загруженность.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 18.03.2011, 14:44   #9
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

знаю, я не об етом, в тот момент когда процес работает, что б он меньше загружал, хотя сеичас попробую с приоритетами
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 18.03.2011, 14:52   #10
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Код:
procedure TPlayer.Execute;
begin
  inherited;
  while True do begin
    Label1.Left := Label1.Left - 1;
    if Label1.Left < -Label1.Left then Label1.Left := Panel1.Width;
    sleep(10);
  end;
end;
решит Вашу проблему. "Да ты не очкуй, Славик! Я сто раз так делал!" ©

А ещё... А ещё... Вы знаете, что некрасиво получать доступ к компонентам первого потока из второго напрямую? Используйте
Код:
Synchronize(pocedure);
PS: так... стоп... а что это у Вас собсно за бегущая строка такая? о0 Это у Вас, сударь, ползающий лэйбл...

И ещё хотелось бы поинтересоваться... Почему для таких простейших действий не подходит таймер и требуется именно поток?
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 18.03.2011 в 14:58.
Johnson вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# BackgroundWorker - завершение работы потока Lastsummer Помощь студентам 2 16.03.2011 18:04
Как узнать номер потока из самого потока? GaMeSTeR Помощь студентам 0 03.12.2010 09:50
Стабилизация видеоизображения Maloy-Kom Помощь студентам 2 14.10.2010 01:45
Подскажите что написать в пункте "Описание работы программы" курсовой работы Marsel737 Свободное общение 3 14.01.2010 12:44
Для облегчения работы с TFS - приложение для работы над дефектами и задачами Аякс Софт 1 18.03.2009 11:43