powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обработка нажатия трех кнопок в параллельном потоке
25 сообщений из 110, страница 4 из 5
Обработка нажатия трех кнопок в параллельном потоке
    #39579015
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicМожете меня расстрелять, но Он прекрасно работает!..)))
Попробуй, пока он работает, нажать, скажем, крестик в правом верхнем углу.
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579024
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Freedoom , очень интересно получилось! Класс!
(Нет явного цикла ожидания, доп.потока и TAG использован по совету парней!)
Архив проекта прилагается ...)
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579026
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic Freedoom , очень интересно получилось! Класс!
(Нет явного цикла ожидания, доп.потока и TAG использован по совету парней!)
Жаль только электроэнергии за нагрузку процессора в 100% и тормозов компьютера из-за этого.
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579029
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerПопробуй, пока он работает, нажать, скажем, крестик в правом верхнем углу.Ничего не произошло, и по крайней мере от Крестика я буду избавляться вообще!
Ну нельзя закрывать окно посредине открытого цикла!
Но это уже мелочи и совсем другая история...
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579032
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicНу нельзя закрывать окно посредине открытого цикла!Даже если пользователь передумал ждать окончания твоего цикла?
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579034
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRockЖаль только электроэнергии за нагрузку процессора в 100% и тормозов компьютера из-за этого.
Тормозов не наблюдается, а скачек нагрузки на CPU - c 25 до 50%. Это много?
Можно если захочется - таймером ворон на ветках посчитать!..)))
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579035
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRockДаже если пользователь передумал ждать окончания твоего цикла?Выход из процедуры будет возможен только по кнопке Выход, с корректными действиями.
А сам расчет (в Тестовом варианте - это счет от 0 до 500 и от 501 до 1000 и т.д.) в Реальном цикле выполняется достаточно быстро, так что юзер и не успеет мышкой на Крестик навести (Если он его еще сумеет найти на форме)!..)
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579037
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellicа скачек нагрузки на CPU - c 25 до 50%. Это много?
Значит у тебя 4 процессора (ядра). На одном уже "работала" подобная "программа", а эта запустилась на другом.
А если бы было одно ядро - нагрузка была бы 100.
Но не отчаивайся, и на многоядерных компьютерах, все программы, GUI-поток которых работал на том процессоре, который ты отправил в кому, будут тормозить.
Много это или не много - пользователям твоей программы решать.
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579040
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRockЗначит у тебя 4 процессора (ядра). На одном уже "работала" подобная "программа", а эта запустилась на другом.
А если бы было одно ядро - нагрузка была бы 100.
Но не отчаивайся, и на многоядерных компьютерах, все программы, GUI-поток которых работал на том процессоре, который ты отправил в кому, будут тормозить.
Много это или не много - пользователям твоей программы решать.Да, верно, у меня 4 ядра!..)
С Одним ядром - это Pentium-1 что ли? Так мой уже такой давно на свалке!..))
А программа реальная - для узконаправленного круга пользователей пишется - для себя, ну максимум еще может для 2 -х других друзей!

Ну а будут тормоза - можно и твоим Потоковым вариантом воспользоваться! - Он судя по индикатору - вообще не грузит процессор!..)
Надеюсь проблем, обращения из Потоковой процедуры к другим функциям и процедурам, не должно быть?!
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579043
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicС Одним ядром - это Pentium-1 что ли?
В твоём случае, если б у тебя было 2 ядра, оба стали б заняты (т.к. 1-е уже кто-то занял).
Не, если не жалко электроэнергии и нервов, плевать на прокляться благодарных пользователей - я ж не против.

BellicПотоковой процедуры к другим функциям и процедурам, не должно быть
Функциям и процедуры, как и память, не принадлежат какому-то потоку. Их можно использовать из любого.
Только поток кода будет хоть и одинаков, если вызывать одну функцию в разных потоках, но их будет несколько, а вот память - одна на всех.
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579044
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellicскачек нагрузки на CPU - c 25 до 50%. Это много?

Это полный П. У правильно написанной программы в покое должно быть нулевое потребление ЦПУ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579045
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock , Кстати - добавил Sleep(1); в ЭТОТ КОД , и процент загруженности вообще упал, проверь:
Код: pascal
1.
2.
3.
4.
5.
while FRes = 0 do
begin
  Sleep(1);
  Application.ProcessMessages;
end;


- Без Sleep(1) -- 25-27% в ожидании нажатия клавиш;
- Со Sleep(1) -- загрузка в ожидании практически не увеличилась (1-5%)!
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579048
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаем дальше фигнёй страдать??)) А вот воспользовались бы таймером, даже в потоке. То не пришлось бы заниматься такими оптимизациями)))
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579052
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем более, applicationevents сообщит о нажатии клавиши. И вообще не надо никаких собственных крутых for-ов
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579054
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

А теперь попробуй закрыть программу крестиком.
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579059
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic YuRock , Кстати - добавил Sleep(1); в ЭТОТ КОД , и процент загруженности вообще упал, проверь:
Код: pascal
1.
2.
3.
4.
5.
while FRes = 0 do
begin
  Sleep(1);
  Application.ProcessMessages;
end;



- Без Sleep(1) -- 25-27% в ожидании нажатия клавиш;
- Со Sleep(1) -- загрузка в ожидании практически не увеличилась (1-5%)!
Не хочу я пробовать
Это мрак. Что со слипом, что без.
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579061
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreatBellic, А теперь попробуй закрыть программу крестиком. rgreat , Вы похоже Тему вообще не читаете!?
ВОТ ТУТ я уже ответил на этот вопрос!
Ну нету у меня на Реальной форме КРЕСТИКА!!! На Тестовой форме он конечно имеется, но я не буду туда нажимать!
Я форму создавал сразу без крестиков, значков сворачивания и минимизаций! Что бы потом вопросов не было!..)
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579066
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Беллик, сделай нормально, правда :) Тебе же самому будет лучше и проще потом. Не надо потоков бояться, всё там с ними просто, если один раз разобраться. ProcessMessages - это, как правило, костыль, хоть со слипом, хоть без. Рано или поздно он гарантированно вылезет боком. Причём в таком месте, что вообще никак не связано напрямую с кодом. И вот тогда всю голову сломаешь, почему глючит.
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579067
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НяшикПродолжаем дальше фигнёй страдать??)) А вот воспользовались бы таймером, даже в потоке. То не пришлось бы заниматься такими оптимизациями)))А кто Вам мешает написать свой вариант на основе моего Тестового и приложить к сообщению полный рабочий проект(без ошибок ток)?
Тем более, applicationevents сообщит о нажатии клавиши. И вообще не надо никаких собственных крутых for-ов
Няшик , мне на пиво братишка позвал, к сожалению вернусь только завтра, но я хотел бы Заценить и Ваш вариант с Таймером и Эвентсами!
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579071
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Хех, присоединюсь к остальным: Страдай фигней, на здоровье.
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579073
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaonБеллик, сделай нормально, правда :) Тебе же самому будет лучше и проще потом. Не надо потоков бояться, всё там с ними просто, если один раз разобраться. ProcessMessages - это, как правило, костыль, хоть со слипом, хоть без. Рано или поздно он гарантированно вылезет боком. Причём в таком месте, что вообще никак не связано напрямую с кодом. И вот тогда всю голову сломаешь, почему глючит.
Да я собственно с Потоков и начинал тему, до этого просто никогда не работал с ними!
Но по ходу оказалось, что можно и без них обойтись, и код очень коротким получался ведь!?

А что касается ProcessMessages , то я им и в других затяжных процедурах пользуюсь, чтоб избавиться от "Программа не отвечает"(или как там?) в шапке форм! А как по другому этого избежать?
Вот недавно сравнительно узнал, что можно ProgressBar.Refresh делать!
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579078
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дивлюсь я вам, мужики. Вместо того, чтобы доедать оливье и в телик пялиться, вы домашку школьнику, пересевшего с бейсика на паскаль, делаете. Да и еще с ним аргументированно спорить пытаетесь
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579079
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

Не знаю, как кто, я уже оливье с шубой объелся Хватит, надо калории немного потратить ) Пациент не совсем упоротый, шансы есть.
...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579084
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

У меня всё без ошибок работает. Ошибки делаешь ты...

Это задача вообще на 10 - 20 минут в реализации.

Может бы начал с чего нибудь полегче ????


НяшикЦиклы к слову вообще не нужны, уже есть ApplicationEvents

Можно и так сделать ведь
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg.message = 513 then
  begin
    if not SButtonEnebled then
    begin
      if Msg.hwnd = SButton.Handle then
        SButtonEnebled := true
      else
        Memo1.Lines.Add('Кряя. Надо нажать на SButton');
      exit;
    end;

    if Msg.hwnd = Button1.Handle then
      Memo1.Lines.Add('Нажата кн."Продолжить"')
    else if Msg.hwnd = Button2.Handle then
      Memo1.Lines.Add('Нажата кн."Пропустить"')
    else if Msg.hwnd = Button3.Handle then
      Memo1.Lines.Add('Счет Остановлен!')
    else
      exit;

    SButtonEnebled := false;
  end
  else if Msg.message = 257 then
  begin
    Memo1.Lines.Add('Нажата кнопка: ' + chr(Msg.wParam));
  end;
end;

...
Рейтинг: 0 / 0
Обработка нажатия трех кнопок в параллельном потоке
    #39579086
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

Я уже поправился на 8 кг... Тяжело ходить даже стало xD
...
Рейтинг: 0 / 0
25 сообщений из 110, страница 4 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обработка нажатия трех кнопок в параллельном потоке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]