|
|
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Доброго дня господа ! Имею первичную постановку 1.Динамический вызов из библиотека DLL 2.Создаю пользовательский объект AddSpan 3.Основная функция объекта AddSpan это Execute 4.Поле объекта Thread, который может запуска Execute в потоке (по потребности) 5.Возврат значения RecordSet, по результатам выполнения (в примере возвращаю String) Проблема при вызове в потоке, невозможно вернуть результат Возможное решение 1. При создание AddSpan - фиксирую адрес ячейки constructor TAddSpan.Create(aFile: String; aBars: TProgressBar; Terminate: TTerminate; var aSql: OleVariant); ............... pSql:=@aSql; ................ 2.При создании поля-потока, фикcирую родитель-объект constructor TAddExec.Create(aHandleParent: TAddSpan; aExecute: TExecute; aTerminate: TTerminate); ................ HandleParent :=aHandleParent; ................ 3.При окончании работы потока - уничтожаю родитель-объект, предварительно по адресу передав результат выполнения функции Execute procedure TAddExec.TerminateThread(Sender: TObject); begin HandleParent.pSql^:=OleVariant(HandleParent.SQL); - возврат результата HandleParent.Free; HandleParent:=Nil; AddTerminate(Sender); - доп. процедура которая в основной форме end; Не нравится - " окончания работы потока - уничтожаю родитель-объект" уничтожить из дочери - родителя - не есть архитектурно ! - слишком сексуально !!!! и много извращений связанных с адресами переменных Но другого решения увы не нашел. О великие ГУРУ прошу подсказать более технологичное решение (можно с примером) Заранее благодарен ! Имею код вызова Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Пользовательский класс Код: 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. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 16:10 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, используй сообщения. Рабочая нить выделяет память под результат и, выполнив работу, посылает сообщение потребителю. Потребитель последовательно выгребает сообщения из очереди, обрабатывает и освобождает память. Сто раз описано, в том числе и здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 16:18 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ёёёёёHOME_X, Сто раз описано, в том числе и здесь. Если желаете помочь - пишите четко, и на конкретном примере Если НЕ желаете помочь НЕ пишите в 101 раз... Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 16:51 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, а что тебе непонятно, конкретно? Не знаешь, что такое сообщения, сообщения Windows, очередь сообщений нити, ... - что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 16:58 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ёёёёёHOME_X, а что тебе непонятно, конкретно? Не знаешь, что такое сообщения, сообщения Windows, очередь сообщений нити, ... - что? Изложите Ваши мысли в конкретный программный код Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 17:32 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_XИмею первичную постановку 1.Динамический вызов из библиотека DLL Твой код где: в основном приложении или в библиотеке? Потоки где: в основном приложении или библиотеке? Во втором случае обломись, потоки и DLL это тема на которой обламывают зубы даже зубры, новичкам туда лучше не лезть вообще. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 17:59 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovHOME_XИмею первичную постановку 1.Динамический вызов из библиотека DLL Твой код где: в основном приложении или в библиотеке? Потоки где: в основном приложении или библиотеке? Во втором случае обломись, потоки и DLL это тема на которой обламывают зубы даже зубры, новичкам туда лучше не лезть вообще. 1. - пользовательский объект находиться в DLL - в этом объекте находиться метод Execute, вызываться как линейно так и в потоке - в этом объекте находиться метод ExecuteThread, который "заворачивает" Execute и выполняет его в потоке - этот объект возвращает тип RecordSet (OleVariant - так как эта DLL будет использоваться НЕ только исходниками Delphi) - вызывающий код, находиться в основном приложении , вызов объекта осуществляется динамически (LoadLibrary->FreeLibrary) Если есть еще вводные вопросы - прошу Вас..... P.S. "зубы даже зубры" Зубрами не рождаются, "горшки не только программисты обжигают" Во времени особо не ограничен, если конкретизируете тему "потоки и DLL" (примеры , статьи , ссылки) узнать новое и практически применить знания буду рад. Спасибо за уделенное время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 18:54 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovHOME_XИмею первичную постановку 1.Динамический вызов из библиотека DLL Твой код где: в основном приложении или в библиотеке? Потоки где: в основном приложении или библиотеке? Во втором случае обломись, потоки и DLL это тема на которой обламывают зубы даже зубры, новичкам туда лучше не лезть вообще. Какая разница, где поток в основном приложении или в DLL? Потоку в общем-то насрать, где крутиться. Проблема в менеджере памяти и общих данных. Есть особенности работы при инициализации DLL, но в целом потоку без разницы. А вообще тема норм, хорошо названа, побольше бы таких тем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 18:55 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. А кто поток ждать будет? А вообще это лучше реализовывать на интерфейсах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 19:02 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014Какая разница, где поток в основном приложении или в DLL? А вообще тема норм, хорошо названа, побольше бы таких тем ....OleVariant - так как эта DLL будет использоваться НЕ только исходниками Delphi Основное приложение (оно же Delphi, оно же VBS, оно же VBA, оно же ............) ссылается на логически законченный объект, который в DDL Побольше технологически грамотных решений и понимания тоже не помешает.. А кто поток ждать будет? А вообще это лучше реализовывать на интерфейсах. В Delphi - основная форма - AddTerminate Код: pascal 1. 2. 3. 4. 5. 6. 7. Буду рад осмотреть Ваш вариант решения если начальных вводных недостаточно - прошу вопрошать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 19:37 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
[quot HOME_X] Основное приложение (оно же Delphi, оно же VBS, оно же VBA, оно же ............) [/src] Добавлю что исходя из вызывающего приложения в DLL реализовано несколько сценариев вызова, в том числе и COM - сервер, ряд местных особенностей и настроек ПК, требуют простой реализации (например DLL в текущей папке вместе с EXE или по заданному путь в "открытом" коде VBA) так как нет доступа к изменению системной переменой Path, и невозможно изменить системный реестр Т.е. у меня ПОКА стоит первичная задача - DLL -> Thread -> возврат RecordSet..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 19:54 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014Есть особенности работы при инициализации DLL, но в целом потоку без разницы. При инициализации-то это ещё цветочки. Выгрузка это то место где из-под потока может внезапно исчезнуть его код, не говоря уже о поддерживающей RTL. HOME_XТ.е. у меня ПОКА стоит первичная задача - DLL -> Thread -> возврат RecordSet..... Обломись. Так работать не будет даже если ты перечитаешь целый MSDN. Тут нужен COM-сервер. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 21:24 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, String, TObject и другие типы - тоже поддерживаются VBA? Что-то не похоже на COM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 21:26 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
При инициализации-то это ещё цветочки. Выгрузка это то место где из-под потока может внезапно исчезнуть его код, не говоря уже о поддерживающей RTL. 1. Загрузили DLL 2. Запустили поток в отдельной процедуре 3. Остановили поток, убедились, что он остановлен полностью. 4. Выгрузили DLL Как то так? А еще желательно скомпилировать dll и exe с одним bpl пакетом, чтобы не маятся с менеджером памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 21:31 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Проблема при вызове в потоке, невозможно вернуть результат У вас корявый код, надо ждать, когда выполнится поток и только потом получать результат. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. По уму надо использовать COM интерфейсы. А не вот это все. Тем более для VBA. Если же вызывать на прямую из VBA, то VBA не понимает делфи объекты, а стринги воспринимает как Ansi. String в последних версиях делфи уникодный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 21:36 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovHOME_XТ.е. у меня ПОКА стоит первичная задача - DLL -> Thread -> возврат RecordSet..... Обломись. Так работать не будет даже если ты перечитаешь целый MSDN. Тут нужен COM-сервер. В VBA на прямую можно вызывать функции из DLL без COM сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 21:38 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Только автор знатно на говнокодил, поэтому поэтому имеет безудержный секс, который в будущем может только усиливаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 21:41 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014В VBA на прямую можно вызывать функции из DLL без COM сервера. И получать из них RecordSet? Может, конечно, но зачем в этой картине Delphi? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:07 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovziv-2014Есть особенности работы при инициализации DLL, но в целом потоку без разницы. При инициализации-то это ещё цветочки. Выгрузка это то место где из-под потока может внезапно исчезнуть его код, не говоря уже о поддерживающей RTL. HOME_XТ.е. у меня ПОКА стоит первичная задача - DLL -> Thread -> возврат RecordSet..... Обломись. Так работать не будет даже если ты перечитаешь целый MSDN. Тут нужен COM-сервер. Да в общем все работает .... Мне не понравилась работа с адресами и уничтожением "родителя в дочере" Буду еще тестировать... может всплывуют ошибки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:09 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014HOME_X, String, TObject и другие типы - тоже поддерживаются VBA? Что-то не похоже на COM. Использую OLEVariant .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:10 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovziv-2014В VBA на прямую можно вызывать функции из DLL без COM сервера. И получать из них RecordSet? Может, конечно, но зачем в этой картине Delphi? Автор собрался получать данные в String->WideString->OleVariant, и простые типы можно и так. Я бы сделал через PAnsiChar - так быстрее, и надо память выделять правильно. А так конечно боль RecordSet передавать. Умнее запихать интерфейсы. Может ли VBA вызывать интерфейсы без IDispatch - если умеет то, можно обойтись малой кровью. А если не умеет, то лучше сделать COM Server - это добро можно будет использовать в любом месте без проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:12 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014HOME_X, Проблема при вызове в потоке, невозможно вернуть результат У вас корявый код, надо ждать, когда выполнится поток и только потом получать результат. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. По уму надо использовать COM интерфейсы. А не вот это все. Тем более для VBA. Если же вызывать на прямую из VBA, то VBA не понимает делфи объекты, а стринги воспринимает как Ansi. String в последних версиях делфи уникодный. Этих строк не должно быть именно здесь Они в событии OnTerminate aSql:=OleVariant(A.sSql); //??? В A - это результат? A.Free; A:=Nil; а если ставить WaitFor - тормознете основную форму - тогда нет смысла в потоке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:14 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014HOME_X, По уму надо использовать COM интерфейсы. Их надо регистрировать в OS - системный реестр закрыт от изменений а использовать просто DLL возможно почти вседа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:17 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, а если ставить WaitFor - тормознете основную форму - тогда нет смысла в потоке Тогда ни как, меняйте подход. Вы как результат дождетесь? Можно использовать колбеки, но как их реализовать в VBA я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:19 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014В VBA на прямую можно вызывать функции из DLL без COM сервера. Именно так - что с успехом протестировал (но на тот момент быз потока) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:19 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_Xziv-2014HOME_X, По уму надо использовать COM интерфейсы. Их надо регистрировать в OS - системный реестр закрыт от изменений а использовать просто DLL возможно почти вседа Тогда выясняйте может ли VBA вызывать интерфейсы без IDispatch. С# может делать такое, наверное VB.Net может. Может VBA сделали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:21 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014, Напиши интерфейс на делфи от TInterfacedObject и передай указатель при вызове DLL из VBA и попробуй вызвать функцию из интерфейса. Если получится, можно облегчить себе работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:23 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovziv-2014В VBA на прямую можно вызывать функции из DLL без COM сервера. И получать из них RecordSet? Может, конечно, но зачем в этой картине Delphi? переменная типа OleVariant отправляемая по ссылке решает вопрос далее dim D as adodb.recordset set D = "переменная типа OleVariant отправляемая по ссылке" Могу прислать рабочий код vba ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:23 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, У тебя проблема в том, чтобы дождаться окончания работы потока. Можно сделать функцию, которая будет проверять окончание работы потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:26 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014ziv-2014, Напиши интерфейс на делфи от TInterfacedObject и передай указатель при вызове DLL из VBA и попробуй вызвать функцию из интерфейса. Если получится, можно облегчить себе работу. VBA через прямую публикацию и OLEVariant работает VBS через COM работает Delphi напрямую через компил. класс без потока работает Delphi напрямую через компил. класс с потоком работает Delphi c включением DLL без потока работает Delphi c включением DLL с потоком ТЕСТИРУЮ... Отошли от темы первичного сообщения о DLL->Thread->@ извращениях Мне не нравятся передача фиксация и передача адреса, и удаление родителя класса через дочь класса Вот это была суть вопроса - чем можно заменить Приложите Ваш код если не сложно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:32 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014HOME_X, У тебя проблема в том, чтобы дождаться окончания работы потока. Можно сделать функцию, которая будет проверять окончание работы потока. Может быть Вы праву - ТЕСТИРУЮ ... Сбросьте пожалуйста пример такой функции - на чем основывается, на таймере ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:36 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Уважаемые господа Dimitry Sibiryakov, ziv-2014, ёёёёё Спасибо за диалог и доброй ночи !!!!! P.S. - пишите Ваши соображения в коде - так намного понятнее и эффективнее общаться.До утра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 22:40 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014HOME_X, У тебя проблема в том, чтобы дождаться окончания работы потока. Можно сделать функцию, которая будет проверять окончание работы потока. Вы правы - есть такой момент = "окончание работы" Сбросьте вашу функцию пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 09:49 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_Xziv-2014HOME_X, У тебя проблема в том, чтобы дождаться окончания работы потока. Можно сделать функцию, которая будет проверять окончание работы потока. Вы правы - есть такой момент = "окончание работы" Сбросьте вашу функцию пожалуйста Это вопрос реализации. Я предложил подождать поток. Но этот вариант не подошел. Возникает вопрос: где вы будете ждать поток? В коде VBA? Можно передавать через таймер результаты. Но тогда надо знать адрес функции в VBA, которой передавать результаты? Тоже как вариант решения проблемы. Есть же по-моему такая функция в VBA AddressOf, которая возвращает адрес функции. https://docs.microsoft.com/ru-ru/dotnet/visual-basic/language-reference/operators/addressof-operator Фактически можно реализовать типа колбеков. Надо эту тему поисследовать. Я вас просил узнать, можно ли в VBA передавать указатели на интерфейсы через функции в DLL и вызывать методы интерфейса в VBA? Я не пробовал. Лучше все же реализовать COM сервер и проще и надежнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 10:28 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014HOME_Xпропущено... Вы правы - есть такой момент = "окончание работы" Сбросьте вашу функцию пожалуйста Это вопрос реализации. Я предложил подождать поток. Но этот вариант не подошел. Возникает вопрос: где вы будете ждать поток? Пусть будет Ваша функция применительно к Delphi т.е. DLL->Thread->Delphi P.S. Не работает Synchronize... полное отсутствие реакции если простой вызов процедуры все в норме procedure MyPause begin ShowMessage('Pause'); end; procedure Execute ................ MyPause -- норма Synchronize(MyPause) -- полное игнорирование ............. end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 11:06 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_Xziv-2014пропущено... Это вопрос реализации. Я предложил подождать поток. Но этот вариант не подошел. Возникает вопрос: где вы будете ждать поток? Пусть будет Ваша функция применительно к Delphi т.е. DLL->Thread->Delphi P.S. Не работает Synchronize... полное отсутствие реакции если простой вызов процедуры все в норме procedure MyPause begin ShowMessage('Pause'); end; procedure Execute ................ MyPause -- норма Synchronize(MyPause) -- полное игнорирование ............. end А причем здесь Synchronize -то это в общем-то внутренняя функция синхронизации с основным потоком в VCL. Если вы ее используете в VBA, то ничего работать не будет. 1. Запустили поток. 2. Дождались результатов. 3. Возвратили результаты. Но синхронизацию надо делать через создание невидимового окна TWinControl. Пример реализации есть тут https://github.com/wadman/wthread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 11:43 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014, Для синхронизации необходимо 1. Создать окно FToolWindow := AllocateHWnd(WWindowProc) при создании потока; 2. Послать сообщение через SendMessage/PostMessage(FToolWindow, ...) - это будет синхронизация. 3. В функции WWindowProc делать вызов Callback из VBA. 4. Удалить окно при завершении потока DeallocateHWnd(FToolWindow); Как-то так должно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 11:49 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_Xпишите Ваши соображения в коде - так намного понятнее и эффективнее общаться. Зачем? У тебя же уже всё работает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2019, 11:59 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014ziv-2014, 3. В функции WWindowProc делать вызов Callback из VBA. Относительно VBA - хочу чуть отложить тему Вот что имею по Delphi->DLL->Thread Можете дать грамотный совет относительно решения - так как применительно к нижеизложенному это даже не СЕКС, а малолетный онанизм Относительно потока и его "счастливого окончания" Исходя из проведенных тестов могу заключить что в случае с DLL событие окончания выполнения работ (после метода Execute) "теряеться где-то там". Обработчик потока OnTerminate его не получает. Текущее "затычка-решение" Внедрение объекта TTimer, включаю после выполнение основной процедуры метода Execute на его событие вешаю - выключение таймера и выполнение списка "close-terminate" со- бытий потока. Эффект и работоспособность восстановлена. Это описание "поле-потока" Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Это описание "родитель-объекта" Код: 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. Есть второй вариант - если ПРОСТО вызвать ShowMessage(....) функциональность восстановлена в полном объеме Т.е. сделать так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Отсюда вопрос - что происходит с приложение и как, где и с какого места программного кода можно сэммулировать и отправить сообщение системе (Send/Post Message) для устранения системной ошибки. Заранее благодарен ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2019, 23:56 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovHOME_Xпишите Ваши соображения в коде - так намного понятнее и эффективнее общаться. Зачем? У тебя же уже всё работает. У меня есть стремление не только закрыть дыры - сделать верное решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2019, 23:58 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Обработчик потока OnTerminate его не получает. OnTerminate - работает через synhronize и поэтому это только делфи решение. Использовать надо SendMessage/PostMessage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2019, 09:40 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Отсюда вопрос - что происходит с приложение и как, где и с какого места программного кода можно сэммулировать и отправить сообщение системе (Send/Post Message) для устранения системной ошибки. Создавай вместе с потоком дополнительное окно и разрушай его, когда поток будет завершен. И через это окно синхронизируйся при помощи SendMessage/PostMessage. У тебя вызовы из VBA происходят в главном потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2019, 09:43 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, в реализации потоков есть заглушка, обработчик WakeMainThread можно установить свой и сигнализировать своему созданому в главном потоке окну что бы оно вызывало CheckSynchronize в принципе и окно с таймером, которое вызывает CheckSynchronize тоже как вариант и всё будет работать стандартно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2019, 11:36 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)HOME_X, обработчик WakeMainThread Хотел бы опробывать Ваш вариант Имею описание класса Код: 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. DLL -> родитель объект ->поле поток (уточните верно ли понял где именно надо создать класс TDLLThreadSync) После выполнения основного задания в Execute - удаляю этот класс, по логике должна возникнуть синхронизация и отработать событие OnTerminate :=HandleParent.TerminateThread1; Но результат не получен - где ошибся ? где необходимо создать класс TDLLThreadSync - основная форма (НЕ DLL) - DLL -> классе родителе ? - DLL-> класс родителя -Ю Юполе потоке ? Спасибо Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2019, 23:10 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, авторПосле выполнения основного задания в Execute - удаляю этот класс, по логике должна возникнуть синхронизация и отработать событие OnTerminate :=HandleParent.TerminateThread1;нет, OnTerminate вызывается после выполнения этого метода по идее вот так должно работать Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 00:00 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, я чесно говоря не вижу зачем в вашем случае вообще использовать синхронизацию если она не используется (т.е. вообще с какого ляду вы синхронизируетесь) и просто нужно отрабатывание метода, то переопределяем у потока Код: pascal 1. 2. 3. 4. 5. 6. на что то типа Код: pascal 1. 2. 3. 4. или вообще сразу код Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2019, 08:30 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) Код: pascal 1. 2. 3. 4. 5. 6. В целом все получилось с доп. объектом Только вот так ..... Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2019, 23:11 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, TThread Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2019, 17:05 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, IsMultiThreaded = true ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2019, 20:05 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Bred eFeMHOME_X, TThread Код: pascal 1. 2. 3. 4. 5. 6. 7. Не совсем Вас понял - Вы желаете сделать свой объект TThread ? Не используя наследственность от системного TThread ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 22:40 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014Bred eFeM, IsMultiThreaded = true Идея с доп. классом вполне себе оправдала Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Есть некоторые побочные эффекты 1. Приложения НУ ОЧЕНЬ долго закрывается - если без потока в течении 0.7-1 сек - после применения приема с потока и доп. классом 10-12 сек 2. После применения приема с потоком - сворачиваем основную форму (или переопределяем фокус на любое другое окно операционной системы) и вновь разворачиваем форму или возвращаем фокус на окно приложения Имеем системную ошибку доступа к памяти, похожую на ту , которая возникает при обращении к методу уже от-Free - го объекта. Т.е. как будто в "нити сообщений" осталась ссылка на Handle окна TDLLThreadSync А как ее убрать мне не ясно - можите что-то подсказать ? Спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 22:51 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, 1. попробуй сделать окно сам, без AllocateHWnd (см HWND_MESSAGE), у тебя всё равно привязки к объекту в обработчике нет да и вообше класс там излишен достаточно же двух методов по типу StartSupport\ EndSupport 2. WM_NULL замени на что нить другое, самое правильное будет использовать для генерации RegisterWindowMessage - нехорошо в чужом приложении использовать известные константы, особенно которые довольно специфичеки обрабатываются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 12:07 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014Bred eFeM, IsMultiThreaded = true +1 убедитесь, что в DLL в блоке begin..end устанавливается IsMultiThread := True иначе ваш секс с Thread в DLL будет не только безудержным, но еще и нескончаемым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 12:23 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
b0rkziv-2014Bred eFeM, IsMultiThreaded = true +1 убедитесь, что в DLL в блоке begin..end устанавливается IsMultiThread := True иначе ваш секс с Thread в DLL будет не только безудержным, но еще и нескончаемым Господа советчики, а вы хоть раз заглядывали в beginthread? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 12:58 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
wadman, я, например, не использую BeginThread, как и разные костыли типа TThread. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 13:19 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ёёёёёя, например, не использую BeginThread, как и разные костыли типа TThread.Ты ещё скажи что классы не юзаешь и вообще менеджером памяти в делфи не пользуешься... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 14:18 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
wadmanb0rkпропущено... +1 убедитесь, что в DLL в блоке begin..end устанавливается IsMultiThread := True иначе ваш секс с Thread в DLL будет не только безудержным, но еще и нескончаемым Господа советчики, а вы хоть раз заглядывали в beginthread? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Дело далеко не только в старте потоков. Если в dll первый вызов BeginThread произойдет после того, как эту dll уже юзают несколько потоков (что вполне часто бывает), или вызовов BeginThread в этой dll вообще не предвидится, то плохо будет всё равно, и спасёт только b0rkубедитесь, что в DLL в блоке begin..end устанавливается IsMultiThread := True ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 16:47 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
YuRock, +1E10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 17:25 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)HOME_X, 1. попробуй сделать окно сам, без AllocateHWnd (см HWND_MESSAGE), у тебя всё равно привязки к объекту в обработчике нет да и вообше класс там излишен достаточно же двух методов по типу StartSupport\ EndSupport Доброго дня kealon(Ruslan) Попытался изобразить взаимодействие из двух методов Как правильно послать сообщение об окончании потока PostMessage(Form1.Handle, Wm_Finished, 1, LParam(Param)); - не доходит до адресата procedure WmFinished(var Msg: TWmFinished); не выполняется Заранее благодарен ! Код: 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. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2019, 10:10 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Реализовал такой обработчик - но не ясно почему первый вариант с WmFinished не работает Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2019, 11:50 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_XHOME_X, Реализовал такой обработчик - но не ясно почему первый вариант с WmFinished не работает Очевидно, потому что надо читать справку: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2019, 13:20 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Как вы думаете, эти записи по размерам совпадают?.. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Это такой жирный намёк, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2019, 13:23 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
alekcvpЭто такой жирный намёк, да. Вариант взят из IE delphi-учебника ... Первичный синтаксис немного удивил .... но передать СВОЙ тип параметра (TWmFinished) "расположил" к применению (может версии постарше ????!!!!) Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2019, 13:56 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, я же вам не это советовал вот простой пример создания окна - тынц . У вас окно будет ещё проще, ничего делать не надо кроме обработки одного сообщения и инициализации нулями практически всего "класса окна" Код: plaintext при выходе, в обратном порядке финализируете зарегать окно можно в блоке инициализации, дерегистрировать его только не забудьте в блоке финализации, иначе если dll-ку несколько раз загрузят-выгрузят будет облом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 07:40 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, 2. какой Application.OnMessage ? кто его вызывать будет в чужом приложении? 3. а что за приложение то? может там у вас вообще какое-ни будь нетовское приложение и будет кидать вашу нить обработки по всем потокам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 07:44 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_XПервичный синтаксис немного удивил .... но передать СВОЙ тип параметра (TWmFinished) "расположил" к применению (может версии постарше ????!!!!) Спасибо В обработчиках сообщений всегда передаётся TMessage. Все остальные TWmXxx* созданы только для того чтобы удобнее было интерпретировать параметры. Если вы на на их посмотрите, то увидите что это по-факту те же TMessage, только параметры называются по-разному и, иногда, разбиты на более мелкие (т.е. вместо одного Integer поля стоят два SmallInt, например). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 09:56 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
alekcvpВ обработчиках сообщений всегда передаётся TMessage Чуть иначе. Передается только Word (команда), а что за ним следует - может быть чем угодно. См. TObject.Dispatch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 10:16 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
wadmanalekcvpВ обработчиках сообщений всегда передаётся TMessage Чуть иначе. Передается только Word (команда), а что за ним следует - может быть чем угодно. См. TObject.Dispatch TObject.Dispatch анализирует только первые два байта и передаёт дальше. Я с удовольствием посмотрю на код, который передаёт сообщение не с WPARAM/LPARAM, а с какой-нибудь TXXMessage нестандартного размера, учитывая что последнее поле там - LRESULT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 11:27 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
alekcvpЯ с удовольствием посмотрю на код, который передаёт сообщение не с WPARAM/LPARAM Например: Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 11:36 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
wadmanalekcvpЯ с удовольствием посмотрю на код, который передаёт сообщение не с WPARAM/LPARAM Например: Код: pascal 1. 2. 3. 4. 5. 6. 7. Замечательно. Как вы это сообщение теперь в другое окно передадите? Чтобы оно его обработало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 16:05 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
alekcvpwadmanпропущено... Например: Код: pascal 1. 2. 3. 4. 5. 6. 7. Замечательно. Как вы это сообщение теперь в другое окно передадите? Чтобы оно его обработало? Если быть точным, то виндовыми апи это (и многое другое) можно передать доработав обработчик WndProc. Методу Dispatch доработки не нужны, он любую структуру толкает дальше. У меня эта структура используется для общения между потоками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 16:46 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
да так же приведением и передаст, если выравнивание дефолтное не выключит передать же "с побольше размером" вообще проблем нет, DefaultHandler про них "не знает" и не обработает не флеймите попусту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 17:45 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)не флеймите попусту Хорошо, постараемся. kealon(Ruslan)да так же приведением и передаст, если выравнивание дефолтное не выключит Через PostMessage? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 07:46 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
wadman, не задавай глупые вопросы, ты же уже описал как в VCL сабклассится виндовая проца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 09:29 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)не задавай глупые вопросы, ты же уже описал как в VCL сабклассится виндовая проца Вопрос глупый, но ответа нет? ЗЫ. Будь добр, умерь пыл. Водички попей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 09:35 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
wadman, а в этом вопросе как раз и ответ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 11:13 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), если нет желания быть понятым, то какой смысл в такой беседе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 11:16 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
wadman, просто глупые вопросы задаёшь, из разряда "какой рукой опу вытираешь" написал структуру под получение результата и спрашиваешь "как передать?" ну указателем передай, через что нить типа SendMessageCallback, с контролем удаления способов полно цель то, какая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 11:27 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)цель то, какая? Мы с алексом обсудили в пару итераций, закончили, но ты решил вмешаться. Я думал есть какая-то иная мысль, но её не видно, только какое-то недовольство и указки кому и что думать и спрашивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 11:36 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
wadman, ну извини что помешал вам меряться 3.14..-ми ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2019, 12:42 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Спасибо за совет относительно функции BeginThread Она в полном объему удовлетворила мои потребности Работоспособность и функциональность основного потока -> DLL -> объекта -> "и того же объекта" "завернутого" в BeginThread полная и без провалов в памяти Т.е. в качестве LParam я передал ссылку на Self его же передаю PostMessage-ом в вызывающий поток, где с успехом Free-ю. Поле объекта - как поток - ликвидирован Класс - ловушка события - ликвидирован Читабельность и архитектур. кода заметно повысилась. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2019, 12:55 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
HOME_X, Т.е. в качестве LParam я передал ссылку на Self его же передаю PostMessage-ом в вызывающий PostMessage не дает гарантии, что у тебя сообщение придет в отличие от SendMessage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2019, 10:10 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014PostMessage не дает гарантии, что у тебя сообщение придет А куда оно денется? Не по UDP же оно пойдёт... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2019, 14:03 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovziv-2014PostMessage не дает гарантии, что у тебя сообщение придет А куда оно денется? Не по UDP же оно пойдёт... Очередь оконных сообщений переполнится и прощай сообщения, уходя, не прощаются :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2019, 18:47 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014Очередь оконных сообщений переполнится Для этого надо чтобы криворукий программист перестал крутить цикл их обработки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2019, 19:30 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
ziv-2014Dimitry Sibiryakovпропущено... А куда оно денется? Не по UDP же оно пойдёт... Очередь оконных сообщений переполнится и прощай сообщения, уходя, не прощаются :) Хоть раз сталкивался с этим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 08:08 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
wadmanziv-2014пропущено... Очередь оконных сообщений переполнится и прощай сообщения, уходя, не прощаются :) Хоть раз сталкивался с этим? Причем здесь сталкивался или не сталкивался. Главное, что в MSDN написано, что PostMessage не гарантирует отсылку сообщения. А человек на основании этого сообщения какие-то действия по очистке проводит, в итоге может получить утечки или не закрытые handles. Это плохой стиль программирования. А использовать он будет в VBA, а приложения из офиса частенько могут зависать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 10:12 |
|
||
|
DLL - Thread и безудержный секс
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДля этого надо чтобы криворукий программист перестал крутить цикл их обработки. Не обязательно перестать, достаточно уйти в обработку на время большее, чем понадобится для переполнения очереди. Но это естественная фича очередей, да и вообще любых ресурсов - они имеют свойство переполняться. Разве что в виндовых очередях из программы не получится нарастить размер (только глобально для всей системы через реестр). Ну и опять же, когда PostMessage не может отправить сообщение, она возвращает False, и отправитель может кешировать это сообщение как ему нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2019, 10:44 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038889]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
98ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 499ms |

| 0 / 0 |
