|
|
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
Друзья, нужен совет специалиста по потокам. Я объявляю свой класс TMyFile, который включает в себя 2 строковые переменные - имя файла и его хэш. Описан вызов рассчёта хэша, выведенный в поток. Передаю стринговое поле Hash в поток, рассчёт нормальный, но в поле ничего не прилетает. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 09:30 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
Небольшое исправление Было: Код: pascal 1. Стало: Код: pascal 1. Проблема осталась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 09:36 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
OxY63rus, и где результат функции function TMyFile.CalculateHash? Результата нет, поэтому нет и DF.Hash ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 10:02 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
goldmi45, бесконечным циклом я жду пока поток заполнит переданные поле вычисленным значением. Значение поток вычисляет, но память, отведенную под поле Hash не заполняет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 10:06 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
OxY63rus, ну заведите в потоке переменную типа TMyFile и присвойте ей значение экземпляра Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 10:43 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
OxY63rus, Передавать адрес строки - не самая хорошая идея. Добавь в объект поток обработчик OnTerminate, в нём и заполняй значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 10:49 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
OxY63rus, а так? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:08 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
Пересмотрел логику. Решил, что из формы берётся только имя файла и передаётся потоку строка. Этот поток сам создаёт TMyFile, считает хэш и в качестве отладки выводит на экран. Вопрос, а почему я стартую поток, а главная форма не отвисает и чего-то ждёт? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:27 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
OxY63rusВопрос, а почему я стартую поток, а главная форма не отвисает и чего-то ждёт?Потому, что ты создаешь поток спящим и не будишь, а выполняешь его код в основном потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:56 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
YuRock, спасибо! Заработался :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:00 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
OxY63rus, Совет. Если ты собираешься в основном потоке тупо ждать результата работы доп. потока - это означает, что доп. поток абсолютно не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:00 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
YuRock, ну это ясен красен :) Исправил. Я потоку скармливаю путь. Он потом будет хэш считать, в сокет стримить. Ну и форме посылать сообщения о своей активности. Пока всё по плану. Большое всем спасибо за участие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:05 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
OxY63rus Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Уникальнейший код. 1. Поток создается спящим 2. Прямой вызов метода Execute 3. Функция, которая ничего не возвращает 4. Перезаписывание поля мусором, возвращенным из метода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:07 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, логика пересмотрена см. 21720004 . Был не прав, повзрослел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:12 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
OxY63rusлогика пересмотрена см.Лучше. 1. Цикл while not Terminated и явный вызов Terminate нафиг не нужен 2. Нужно ли поле с хешем экземпляру класса TMyFile? Если да, сделать так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. если нет - сделать так OxY63rus Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 3. OxY63rus Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. _Vasilisk_1. Поток создается спящим 2. Прямой вызов метода Execute 3. Смысла существования класса TMyFile я не вижу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 14:05 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
OxY63rus По сути тебе не нужны никакие классы, надо просто параллельно запустить лишь одну функцию. что-то вроде: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Ну а ждать потоки из главного потока дело кривое - забей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 14:05 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
DimonkaНу а ждать потоки из главного потока дело кривое - забей. Ну почему же. Если поток не Anonymous (и соотв. не FreeOnTerminate) - то вполне работоспособная вещь. Запустил операцию - задизейблил все контролы кроме кнопок Стоп и Закрыть. И варианты: a) Закончилась операция (пришло сообщение по PostMessage) - раздизейблил, обработал результаты, Tread.Free, убрал Стоп. б) Нажали Стоп - раздизейблил, Tread.Free, убрал Стоп; в) Нажали Закрыть - Tread.Free, Close. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 14:18 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
YuRockDimonkaНу а ждать потоки из главного потока дело кривое - забей.Ну почему же. Если поток не Anonymous (и соотв. не FreeOnTerminate) - то вполне работоспособная вещь. Запустил операцию - задизейблил все контролы кроме кнопок Стоп и Закрыть. И варианты: a) Закончилась операция (пришло сообщение по PostMessage) - раздизейблил, обработал результаты, Tread.Free, убрал Стоп. б) Нажали Стоп - раздизейблил, Tread.Free, убрал Стоп; в) Нажали Закрыть - Tread.Free, Close. И да и нет. Ты описал случай когда ждёт пользователь, а не функция. Это разные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 14:27 |
|
||
|
Потоки. Возврат значения функции.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_3. Смысла существования класса TMyFile я не вижу Конечно всё не просто так, прежде чем сюда задать вопрос пришлось очень много выкинуть чего и оставить только то, что касается вопроса. Для экономии Вашего же времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 15:13 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39725533&tid=2040187]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 539ms |

| 0 / 0 |
