|
|
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
ДокТы можешь этот тынц сам увидеть, если Лазарь откроешь Вечерком могу выложить тестовый проект (ноут дома). Жду... Хоть пойму, при чем здесь приватные поля основного потока. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 09:48 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, "— Слушай, я русский язык не хорошо знаю… Он пошёл туалет, а Валико постучил дверь и сказал — что тоже… хочет… Такие вопросы задаёте, что неудобно отвечать… даже…" Вечером, все вечером ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 10:08 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Ну вот например: интерфейс Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. implementation Код: 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. Под основным потоком я подразумевал поток, в котором Гуй отрисовывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 15:13 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Док Код: pascal 1. С трудом себе представляю, зачем это нужно. Ведь оно само по себе не о чем не говорит главному потоку, который в это время выполняет мягко говоря такой г-код, чтобы самому догадаться об изменениях переменной: Док Код: pascal 1. 2. 3. 4. 5. 6. Да и по идее этот код должен загрузить процессор. Потому все таки правильнее и проще передать новое значение переменной вместе с сообщением. Или я не до конца разглядел твою мысль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 15:22 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanкоторый в это время выполняет мягко говоря такой г-код, чтобы самому догадаться об изменениях переменной честно говоря, не понял - основной поток не в силах уследить, что делается с его переменными? зы. Я не спорю, я просто интересуюсь, ибо гуманитарий ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 15:51 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докосновной поток не в силах уследить, что делается с его переменными? Ты привел один из способов самостоятельного отслеживания изменений. Сам понимаешь, вариант совсем не вариант. Все таки сообщения, содержащие новые данные как-то более надежный и простой механизм. Грубо говоря я не увидел применения твоему способу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 16:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanТы привел один из способов самостоятельного отслеживания изменений. Ты имеешь ввиду ProcessMessages? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 16:32 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
ДокwadmanТы привел один из способов самостоятельного отслеживания изменений. Ты имеешь ввиду ProcessMessages? Именно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 16:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, ну, у меня тогда появился повод переписать код на событийную модель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2014, 22:12 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Докну, у меня тогда появился повод переписать код на событийную модель А было так, как ты показал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 09:03 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, поскольку в тонкости диспетчеризации сообщений я стал вникать только в последнее время, то в Лазаре (а ЕМНИП, Дельфя описанных мною выше вольностей не позволяла) в тестовых проектах для разнообразия я где-то написал так, а где-то по другому. Теперь, конечно же, придется делать по фен-шую :) зы. Лазарь вообще, отдельная песТня. Я тут виндовые проекты стал портировать в никсы - много интересного познал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 08:35 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Достаточно часто (но не всегда) в одном и том же месте появляется ошибка. Access violation at address .... in module 'MyExe.exe'. Read of address 0000000F. WThread.TWThread.PostToThreadMessage (Line 393, "WThread.pas") - по EurekaLog версия от 28.07.2014 result := (not Suspended)and(PostThreadMessage(ThreadID, Msg, wParam, lParam)); Не знаю как лечить. Может быть поможете? Раньше использовали предыдущие версии и все нормально работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 14:46 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим УлитинWThread.TWThread.PostToThreadMessage (Line 393, "WThread.pas") - по EurekaLog А остальное, что было до этого? И что отправляется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2015, 14:51 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, сейчас отправлю в личку. А так, вкратце там выводится форма с часиками (что типа что-то выполняется и ждите). форма нарисована на winapi. с помощью вашего класса все данные на этой форме обновляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 10:26 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, что-то лички тут не нашел, ладно, тогда так отправлю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 10:28 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим Улитин, то, что я там увидел - это тотальное непонимание как работать с потоками и памятью... Например: Под параметры память выделяется, а под текст - нет. См. функции NewString, FreeString. Код: pascal 1. 2. 3. 4. 5. 6. 7. Это зачем дергается в другом потоке? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Ниже еще интереснее: зачем sleep? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. На сколько я понял - это тяжелое наследие какого-то участка кода, который когда-то работал в одном потоке и теперь стоит задача разнести на разные? Чтобы найти место, где и из-за чего возникает ошибка вынеси TWindowThread в отдельный модуль и протестируй его на пустом проекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 11:09 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Взглянул более внимательно... Это стоит переписать с нуля. Совсем. Вынести экспорт в другой поток будет проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 11:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Ну там все намного проще. раньше все это было написано как класс, в котором запускается отдельной процесс с какой-то логикой. То есть был основной поток с программой, из основного потока создавался поток с нужной процедурой и еще один поток для отрисовки окна. все работало нормально, без каких либо ошибок и все было хорошо. Но пришлось все переписывать, так как если в этом отдельном потоке создавался fastreport с поддержкой мультизадачности (EnableThreadSafe = False), то по полной начинало все глючить. И из-за этого было быстренько все переписано и теперь поток не создается с нужной процедурой, а выполняется в основном потоке. А для отрисовки окна используется Ваш класс. Да, переписано все через ж.., но к сожалению что есть, то и есть. Вначале писал я (с кучей поток), переписывал не я, а человек, который уже был уволен за кучу своих ошибок. N-ая часть этого кода из приложенного файла не используется уже совсем, валяется как мусор или пережиток былого. А почистить времени нет. > На сколько я понял - это тяжелое наследие какого-то участка кода, который когда-то работал в одном потоке и теперь стоит задача разнести на разные? Наоборот, был когда то перевод с кучи потоков на один поток (ну +1 на форму с "часиками") sleep нужен для того, чтобы сообщение нормально отправилось. На некоторых машинах форма просто не успевала создаться (сообщение о показе формы приходило чуть позднее) > Например: Под параметры память выделяется, а под текст - нет. См. функции NewString, FreeString. раньше так все и было, сейчас это не нужно Просто опять же, раньше на какой-то другой версии Вашего класса ошибка не возникала, сейчас возникает. Вот стало интересно почему, отсюда и спросил P.S.: А так, по существу, как то никогда не было проблем как с потоками, так и с дин памятью, так и с тем, как с ней работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 12:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим УлитинПросто опять же, раньше на какой-то другой версии Вашего класса ошибка не возникала, сейчас возникает. Вот стало интересно почему, отсюда и спросил Раньше видимо и код экспорта был иным. В том коде, который приведен ошибки такой быть не может. По меньшей мере при работе именно с wthread (предлагаю протестировать на пустом приложении). А проблемы с памятью имеются и я их показал. Потому и просил стек вызова показать. Скорее всего поток к тому времени не создан, либо убит (то есть равен nil) и обращение к ThreadID вызывает ошибку. wadmanА остальное, что было до этого? Максим УлитинНо пришлось все переписывать, так как если в этом отдельном потоке создавался fastreport с поддержкой мультизадачности (EnableThreadSafe = False), то по полной начинало все глючить. Фастрепорт глючит именно из-за тех-же ошибок, что я и показал. Они тоже любят баловаться Application.ProcessMessages не анализируя EnableThreadSafe. :) Я и его наставил на путь истинный 2 года назад и с тех пор не обновляю. Теперь он работает в потоках. Максим Улитинsleep нужен для того, чтобы сообщение нормально отправилось. Формы можно создавать заранее скрытыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 13:11 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, код экспорта был таким же с точностью до байта, как и в тех версиях Вашего класса. Кстати еще раз, это не экспорт, а выполнение любых процедур, когда заранее точно не известно выполнится ли эта процедура быстро или нет. На тему Procedure TTimerThread.UpdateForm; - он не используется совсем у меня. Как уже сказал, остались части, надо вычистить. На тему слипа. там идет основной поток программы, а раз так, то могу делать в основном потоке что хочу. Разве нет? На тему ThreadParams^.MessageText := MessageText; ThreadParams - это рекорд, под который выделена память с помощью new. По моему я уже выделил память, в том числе и под строку. А работаю исключительно с указателем на этот рекорд и эту строку. Разве нужно еще раз выделять память под строку уже в выделенной памяти под весь рекорд? > А проблемы с памятью имеются и я их показал. вроде проблем этих нет. могу конечно просмотреть в дебаге в отдельном приложении. Только боюсь под это уйдет уйма времени, так как ошибка на реальных проектах возникает очень часто раз из тысячи, а бывает сразу. > Скорее всего поток к тому времени не создан, либо убит (то есть равен nil) и обращение к ThreadID вызывает ошибку. вполне возможно, надо попробовать поставить проверку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 16:56 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим УлитинThreadParams - это рекорд, под который выделена память с помощью new. Вот тебе и понимание работы с памятью и потоками... String по умолчанию уже давно лишь ссылка на участок памяти с символами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:01 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, > String по умолчанию уже давно лишь ссылка на участок памяти с символами конечно я это знаю > Вот тебе и понимание работы с памятью и потоками оке, тогда объясни что не так? и почему огромное количество времени (с 2006 по 2013 год) предыдущий вариант этого класса (моего класса формы с часами) работал БЕЗ ЕДИНОЙ ПРОБЛЕМЫ? проблема с EnableThreadSafe = false не в счет, тут уже прикол самого фастрепорта, как Вы сами написали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:14 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Максим Улитиноке, тогда объясни что не так? и почему огромное количество времени (с 2006 по 2013 год) предыдущий вариант этого класса (моего класса формы с часами) работал БЕЗ ЕДИНОЙ ПРОБЛЕМЫ? Я не знаю как еще объяснить. Что именно тут не понятно? wadmanString по умолчанию уже давно лишь ссылка на участок памяти с символами. Везение это не положительная оценка навыков программирования, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:19 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanМаксим УлитинThreadParams - это рекорд, под который выделена память с помощью new. Вот тебе и понимание работы с памятью и потоками... String по умолчанию уже давно лишь ссылка на участок памяти с символами. Если не считать ещё уличной магии массивов, которая подчищает строки при выходе из процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:23 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, оке, тогда помоги плиз, если конечно не затрудняю. нужно запускать процедуру в том же потоке, что и основная программа, но при этом создавалась форма, в котором был label с каким-то там сообщением, которое можно менять в любой момент времени, progressbar, который так же можно менять, иконка для красивости и label с временем, который показывало сколько времени прошло с момента запуска данной процедуры. Но при этом в тексте самих этих процедур на запуск ничего переделывать было бы не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:25 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=38859959&tid=2039179]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 476ms |

| 0 / 0 |
