|
|
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Озадачился реализацией данного способа, а опыта работы с потоками вообще нету..( Попробую словесно описать суть задачи - Имеется форма и Основная процедура, которая производит какие-то вычисления - на форме кроме разных полей, имеется Три кнопки: " Заменить ", " Пропустить " и " Выход " - в определенный момент Основной процедуре нужно передать определенные значения или пустить ее по одному из трех направлений, в зависимости от выбора пользователя из трех кнопок. Сразу скажу - по определенным причинам, применение Диалоговых окон мне не подходит! Реализацию алгоритмически вижу примерно так: - внутри Основной процедуры в Осн.потоке пишем бесконечный цикл с анализом внутри трех Флаг-переменных - например Zamena , Propusk , Vihod : Boolean ; - перед этим бесконечным циклом запустить Доп.поток с тремя процедурами обработки клика на соответствующие клавиши, внутри каждой из которых будут меняться Флаг-переменные; - т.о. получив нужные флаги внутри бесконечного цикла, Осн.поток останавливает Доп.поток и продолжает выполнение Основной процедуры. По моему - сей алгоритм можно реализовать с помощью потоков!? Может быть кто либо уже реализовывал его или есть похожие варианты кода?! P.S. По случаю - поздравляю всех форумчан и Администрацию с наступающим 2018 годом!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 17:09 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Bellic- внутри Основной процедуры в _Осн.потоке_ пишем бесконечный цикл с анализом внутри трех Флаг-переменных - например *Zamena*, *Propusk*, *Vihod*: *Boolean*; - перед этим бесконечным циклом запустить _Доп.поток_ с тремя процедурами обработки клика на соответствующие клавиши, внутри каждой из которых будут меняться Флаг-переменные; Наоборот. Всем GUI и в том числе кнопками должен заниматься исключительно основной поток. Дополнительный поток - делает всю продолжительную работу, подчиняясь командам из основного. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 17:45 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНаоборот. Всем GUI и в том числе кнопками должен заниматься исключительно основной поток. Дополнительный поток - делает всю продолжительную работу, подчиняясь командам из основного. И что мешает Три процедуры обработки нажатия кнопок написать в отдельном модуле, запустить в Доп.потоке, а в Основном - закрутить в цикле анализ Флагов? Т.е. как я описал - не получится сделать? Я просто хочу отказаться от отдельного Диалогового окна в Осн.процедуре, а кнопки разместить на форме! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 17:56 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Я видимо понял! Создав Доп.поток нужно в нем запустить какую-либо процедуру, а в моем алго - лишь три обработчика нажатия клавиш!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:06 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Bellicа в Основном - закрутить в цикле анализ Флагов?В основном потоке и так беспрерывно крутится цикл обработки сообщений. Зачем еще один? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:07 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRockВ основном потоке и так беспрерывно крутится цикл обработки сообщений. Зачем еще один? Цикл анализа реакции выбора Юзера, цикл опроса Флаговых переменных... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:14 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Ведь когда вызывается обычное Диалоговое окно - с момента его Вывода на экран и до нажатия кнопок - тоже ведь внутри идет цикл опроса клавиш, по сути!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:16 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRock Зачем еще один? YuRock , предложи тогда свой вариант - отказа Диалог.окон и переноса кнопок на основную форму! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:19 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
BellicЦикл анализа реакции выбора ЮзераДля этого существуют события баттонклики. По сути - орабатываются сообщения wm_command. Bellicцикл опроса Флаговых переменных... Вот его и запихни в доппоток, и при изменении - кидай сообщение основному, что надо что-то изменить в отображении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:22 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
какой-то поток сознания. Работа делается в отдельном потоке. Хоткеи срабатывают в основном окне, в обработчике делаются нужные действия с "рабочим" потоком. Проблема-то в чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:23 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
BellicВедь когда вызывается обычное Диалоговое окно - с момента его Вывода на экран и до нажатия кнопок - тоже ведь внутри идет цикл опроса клавиш, по сути!?Это только в VCL такая костыльноглючная технология используется для модальности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:23 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRockВот его и запихни в доппоток, и при изменении - кидай сообщение основному, что надо что-то изменить в отображении. Этого нельзя сделать! В Основной процедуре открыта куча файлов, задействовано много циклов и переменных, процедура еще выполняется, просто в ОДИН момент нужен выбор юзера, и все!!! Все решается обычным Диалоговым окном!!! Но мне Диалог не подходит!!! Необходимо, что бы кнопки принятия решения были на самой форме! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:29 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
BellicЭтого нельзя сделать! В Основной процедуре открыта куча файлов, задействовано много циклов и переменных, процедура еще выполняется, просто в ОДИН момент нужен выбор юзера, и все!!!Именно по этому и надо всё это перенести в доп поток, раз много работы. А выбор юзера сделать перед началом этой работы. Ведь это же бред, когда юзер должен 10 минут сидеть ждать, пока программа его попросит сделать выбор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:33 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRockBellicЭтого нельзя сделать! В Основной процедуре открыта куча файлов, задействовано много циклов и переменных, процедура еще выполняется, просто в ОДИН момент нужен выбор юзера, и все!!!Именно по этому и надо всё это перенести в доп поток, раз много работы. А выбор юзера сделать перед началом этой работы. Ведь это же бред, когда юзер должен 10 минут сидеть ждать, пока программа его попросит сделать выбор. Юзер не будет ждать! Даже наоборот - ему придется быстро оценивать промежуточные результаты в Эдитах и прочих полях, и нажимать нужную кнопку! Именно по этому я хочу и отказаться от Диалогового окна, ибо оно закрывает собой часть осн.формы, передвинут его в сторону в ручную - потерять время! Программно разместить например в углу экрана - тоже не вариант - отвлечение внимания юзера и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 18:44 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
BellicЮзер не будет ждать!Не понятно тогда, зачем другой поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 20:03 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
YuRock, не убеждай его, бесполезно. Клиент должен дозреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2017, 22:35 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Парни, видимо меня сильно ругать кое-кто будет сейчас?!..)) Но весь код уместился в Основном модуле и без открытия дополнительных потоков: Тестовый код (палками сильно не бить!..))) Код: 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. Возможно будут замечания и к Тестовому коду, к циклам или же к "GOTO"-переходу, но тут важна сама суть - пока процедура "крутится" в цикле между МЕТКА-ми (выделено желтым цветом), анализируя три флага, пользователь приняв решение может нажать одну из 3-х кнопок. P.S. Поиски в Интернете показали другой вариант - с анализом WM_LBUTTONDOWN, или WM_COMMAND, а потом чтением и анализом Хэндла кнопки... но у меня пока так и не получилось его реализовать. В этом случае по моему можно было вообще обойтись без отдельных процедур - обработчиков нажатия кнопок!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 01:07 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Может кто нибудь мне - умственно отсталому человеку объяснить.... На кой чёрт потоки и бесконечные циклы???? Можно же было всем объектам назначить коллбэк один, или вызов доп коллбэка. И уже там творить все делишки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 01:45 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
НяшикНа кой чёрт потоки и бесконечные циклы???? Можно же было всем объектам назначить коллбэк один, или вызов доп коллбэка. И уже там творить все делишки. Дополнительного потока в крайнем коде - как видите нету! А бесконечный цикл (тот что выделен цветом) - в ожидании изменения флагов... Лучше напишите реально работающий свой вариант с "одним коллбэком"..)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 01:55 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Bellic, Код: 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 02:07 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Bellic, Вообще, судя по Sleep(500) - там запланировано выполнение чего-то длительного, поэтому почти всё что в процедуре ".SButtonClick()" нужно вынести в отдельный поток и уже из него анализировать состояние этих флагов. А вообще, бесконечные циклы, да ещё и со Sleep() в ГУИ потоке - не надо так, пользователи вас за подвисающий интерфейс будут очень долго любить... часто вспоминать... малым загибом... ну и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 02:07 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
alekcvpВообще, судя по Sleep(500) - там запланировано выполнение чего-то длительногоSleep(500) - это задержка, чисто в тестовом коде, чтоб счет был не таким быстрым!.))) поэтому почти всё что в процедуре ".SButtonClick()" нужно вынести в отдельный поток и уже из него анализировать состояние этих флагов.Зачем еще поток? И так ведь все работает? А вообще, бесконечные циклы, да ещё и со Sleep() в ГУИ потоке - не надо так, пользователи вас за подвисающий интерфейс будут очень долго любить... часто вспоминать... малым загибом... ну и так далее.Тестовая программа - не зависает, а Пользователи - исключительно только я, ну может с друзьями поделюсь!..)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 02:32 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Няшик, уточните плизз код вот тут: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Начинается процедура, затем Функция... а вот Код: pascal 1. моя DX вообще не поняла! У Вас ваш код работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 02:42 |
|
||
|
Обработка нажатия трех кнопок в параллельном потоке
|
|||
|---|---|---|---|
|
#18+
Эта функция нужна, что бы найти в массиве индекс элемента. Дабы, что бы по этому индексу обратится к коллекцию case по нужному адресу. Код полностью рабочий, и никаких задержек не надо. Хотя я кое что не дописал. Надо ещё в case добавить 3 пункт (3: exit;), дабы при нажатии второй раз кнопки SButton не вылетал флаг в false ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2018, 02:48 |
|
||
|
|

start [/forum/topic.php?fid=58&startmsg=39578405&tid=2041379]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
178ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 518ms |

| 0 / 0 |
