![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Возник такой вопросец к гуру местмым
![]() Создаю поток по методу сабжа, все работает ![]() ![]() ![]() Вот и вопрос как правильно работать с формой, с переменными модуля и т.п. из потока???? ![]() PS плюс если еще кто-то пояснит как работать с формой из потока созданного с помощью CreateRemoteThread вообще ОГРОМНЕЙШИЙ сенкс ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 1 Всего: 102 |
при работе c формой из потока, необходимо использовать Synchronize
при использовании нескольких потоков необходимо использовать CriticalSection -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
Romikgy |
|
||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Насколько мне известно этот метод для дельфийского класса TThread, а я полmpe.cm API
А это посмотрю спасибо ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
||||
|
|||||
Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
Ну, если сам на API, то и обеспечивай сам взаимоисключающий доступ к VCL. Дело в том что VCL не реентерабельна. -------------------- Все знать невозможно, но хочется |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
В смысле? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
poor_yorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 148 Регистрация: 12.1.2005 Где: Общаги г. Киева Репутация: нет Всего: 8 |
Нельзя использовать большинство компонентов VCL в потоках.
Для этого ты должен унаследовать унаследовать класс от TTheard, написать какую-отдельную процедуру run с обращением к форме. Потом в методе Execute, ты пишешь процедуру потока где и используешь Synhronize(Run). --------------------
Семь раз отмерь, один раз - откомпиль.... Семь раз отпей, один раз - отлей... Семь раз отъешь, один раз - не жадничай и другим дай... |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
еще вариант - обеспечивать связь с формой не операциями с VCL компонентами, а посылкой сообщений, если, конечно, ситуация позволяет...
-------------------- qqq |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
С классом ТТрид это понятно , но мне немного для другого, для работы с чужими компанентами на чужих формах
![]()
Можно конечно , если в своем приложении , однак см. выше -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
Т.е. имеется ввиду компонентами и формами принадлежащими другому процессу? Добавлено @ 14:13 И еще, почитай темку Вывести в memo от 00000000 до 11111111. Там есть для тебя кое что интересное ![]() -------------------- Все знать невозможно, но хочется |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Ага ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Ага поучительно ![]() Только возникает вопрос чем лучше beginthread , чем createthread? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
В beginthread предусмотрены некоторые действия связанные с обработкой Exception возникающего в процедуре реализующей поток, и еще кое чего. В общем, читай хелп по beginthread ![]()
Странно, предполагаю что у тебя проблемы в чем-то другом. А вообще, как ты работаешь "с чужими компанентами на чужих формах"? Приведи-ка пример. -------------------- Все знать невозможно, но хочется |
||||
|
|||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
С Checklistbox я уже разобрался
![]()
Это тестовый вариант но он работает ![]() Это сообщение отредактировал(а) Girder - 27.7.2005, 16:20 -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
Вот это как раз странно. 1. Использование переменной p участвующей в выражении границ цикла в теле цикла это не есть хорошо. 2. Не вижу как определены переменные pc и buf, но у меня большие сомнения что ты правильно используешь сообщение LB_GETTEXT. 3. Ну а вот это:
мне вообще кажется чрезмерно смелым способом работы! Особенно, все что касается (p+8). Если у тебя и все остальное написанно в таком же стиле, то тогда вполне понятно почему это не работает как надо. Добавлено @ 12:21 Прости если показался слишком резким. ![]() Добавлено @ 12:23 Да, и еще. Можешь посмотреть как правильно работать с LB_GETTEXT в реализации метода TListBoxStrings.Get. -------------------- Все знать невозможно, но хочется |
||||
|
|||||
Romikgy |
|
||||||||||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Дафай поочереди :
Это не столь важно букву можно и поменять (т.е. переменную)
pc: array [byte] of char; Buf: byte;
Мож и смело, но это вышло после дизассемблирования участка кода с обычным обращением к компоненте.
Ниче как нибудь сочтемся ![]()
И в чем разница???
Вот исходник, в чем у меня отличие??? То что проверок нет??? ну дык это при написании так сказать релиза учтется ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
||||||||||||
|
|||||||||||||
Петрович |
|
||||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
Дафай. ![]()
Конечно не столь важно, если не столь важен результат ![]()
Ну тогда, в ListBox1.Items.Add('Stroka ' + inttostr(j)+' = '+inttostr(dword(buf))); последний inttostr "хапнет" лишних три байта. Хороше если они там будут, а то и AV схлопотать не долго. А в ListBox1.Items.Add('Stroka ' + inttostr(j)+' = '+inttohex(pbyte(p+8)^,1)+' '+strpas(pc));, как ты думаешь, куда ссылается pbyte(p+8)? Какому процессу принадлежит память на которую ты таким образом получаешь указатель? И что будет когда произойет обращение к pbyte(p+8)^?
Ну тогда, это применимо только к тому приложению, которое участок кода которого был дизассемблирован. Причем, только той же самой его версии. Поскольку от версии к версии данное смещение может легко измениться.
А вот кстати и пример ![]() Какая версия Delphi у тебя? Могу тебя поздравить ![]() Вот текст TListBoxStrings.Get из Delphi 6:
Вот именно так и должно быть, поскольку размер строки, которая будет возвращена SendMessage(..., LB_GETTEXT,...), заранее неизвестен, а соответственно, заранее и неизвестен размер необходимого буфера. Кстати, а у тебя может сломаться уже на строках длинной более 254 символа (pc: array [byte] of char).
Ну... Трудно предположить что при выпуске релиза программист будет скорпулезно проходиться по всему тексту и расставлять обработку ошибок. По крайней мере я такого не видел. Лично я, сразу-же прописываю обработку ошибок. Особенно, учитывая то, что это часто влияет на построение текста программы. Да и при отладке, частенько можно получить ошибку там где ее не получаешь в уже отлаженной программе. В этом случае гораздо приятнее узнать о ней сразу, а не выискивать "почему программа ведет себя не правильно?". -------------------- Все знать невозможно, но хочется |
||||||||||||||
|
|||||||||||||||
Romikgy |
|
||||||||||||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Аналогично ![]()
К словам дафай не будем цеплятся , а !?
dword(buf) - это не захват 4 байт, это преобразование захваченного байта в переменную типа дворд , так что ничего я хватать лишнего не буду !!!
Здеся признаю , лажанулся ![]()
Да у меня стоит третья дельфя, есть разница сначала берется длинна текста ![]() а вот это что:
И последнее
Я на 100 процентов уверен , что длинны у меня не будут превышать даже 50 символов, так что все окей ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
||||||||||||||
|
|||||||||||||||
Петрович |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
Дык не к словам. У тебя так в программе написано.
Согласен. Я что-то стормозил, здесь же не указатель преобразовывается, а непосредственно переменная.
Просто существуют ListBox'ы для которых текст вообще не хранится. Он прорисовывается программой по событию.
Хозяин барин. Я лично в своей жизни никогда ни в чем на все 100% не уверен ![]() Ну и в конце концов, так я понял у тебя теперь все нормально работает? -------------------- Все знать невозможно, но хочется |
||||||||
|
|||||||||
Romikgy |
|
||||||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Дык это только переменная ![]()
Оригинально , не встречал .
Угу
На н-ное кол-во процентов, с Checklistbox я разобрался, с TreeView разбираюсь (никак не пойму как программно к детю обратится/выделить , апи или мессагой?) с DBGrid вооще мрак, здеся подсказали ридонли параметр подравить и можно в принципе , через энтер или двойной щелчек мыши , к данным добратся , но как подправить? еслиб тоже через апи или мессаги, былоб гуд ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
||||||||
|
|||||||||
Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 15 Всего: 55 |
Не, ну если тебя интересует конкретное приложение, с конкретными компонентами. И если тебе известна версия Delphi которой оно было создано, то можно сделать наверное проще. -------------------- Все знать невозможно, но хочется |
|||
|
||||
Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 25 Всего: 155 |
-------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Конкретное приложение мне известно, а вот версия дельфи ... ![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
alexkras |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 10.11.2009 Репутация: нет Всего: нет |
Обнаружил одну особенность. После вызова CreateThread в теле функции-задачи пытаюсь оператором cin ввести целое число(scanf тоже не помогает), но у меня первая цифра "пропадает", т.е. если я ввожу 430, то в переменную записывается 30, 12 - 2, 1999 - 999 и т.д. С чем это связано? Я решил эту проблему, передавая в качестве четвертого параметра CreateThread это самое число(приведенное к типу LPVOID, естественно), которое ввожу с консоли еще до вызова CreateThread, т.е. в функции main. Но все-таки хочу разобраться с этой особенностью.
Предлагаю код(тот, что проблемный):
Все в обычной консоли Win32. Может, у кого-то по-другому? |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
скорее всего стандартным потоком ввода-вывода владеет основной поток, поэтому он первый символ съедает,
имхо не красиво работать с такими потоками из программных потоков, вся работа должна оставаться в основном потоке , а обработка данных , там где хочешь ..... PS сорри за тавтологию -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |