![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| uwannadie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: 1 Всего: 1 |
собственно столкнулся с небольшой проблемкой:
есть функция, производящая некоторые действия, причем довольно долго. как пример:
соответственно надо прикрутить прогрессбар. лично я знаю 3 способа передачи:
Это сообщение отредактировал(а) uwannadie - 16.4.2011, 00:55 --------------------
|
|||
|
||||
| northener |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
А почему бы и нет? Если я правильно понял вопрос, то имхо нет.
Это даже не быдлокодинг. Это просто недопустимо в VCL. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
||||
|
|||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
можно в потоке устанавливать переменную - счетчик процентов, а в основном потоке по таймеру считывать значение и отображать.
Считывание и запись делать interlocked-функциями -------------------- Обижено школьников: 8 |
|||
|
||||
| uwannadie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: 1 Всего: 1 |
прикольная штука, не знал о таком. возник вопрос: а если основной потом - vcl? --------------------
|
|||
|
||||
| northener |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 12 Всего: 20 |
Прикольный вопрос - а об чем вы ещё не знали? Вы сказали что знаете три "способа передачи". При том первые два способа никуда не годятся. bems вам дал ещё один способ. Четвёртый. Только вот для его реализации требуются знания, которые трудно найти в Яндексе, Гугле и т.д. И после всего этого вы спрашиваете "а если основной поток - vcl?" ??? Купите учебник! -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
||||
|
|||||
| uwannadie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: 1 Всего: 1 |
во-первых, знать все невозможно. но можно стремиться узнать как можно больше. и то, что я не знаю того или иного, совсем не означает что я не хочу ничего нового узнать. во-вторых, примерную реализацию этого способа я прекрасно понял, достаточно было глянуть страничку Gunsmoker-a и MSDN, а вопрос задал, желая уточнить нюансы, чтобы не изобретать велосипеды. а в-третьих, не надо опускаться до уровня тыканья лицом в грязь, могу поспорить, что и у Вас запас знаний далеко не безграничен. --------------------
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
То что это vcl не мешает, потому что обращение из разных потоков идет не к vcl-объекам, а к одной переменной размером в машинное слово.
Чтобы прочитать её нужно вызвать InterlockedExchangeAdd(), вторым паоаметром передв 0, чтобы записать - InterlockedExchange. Тут важно помнить, что каждая такая операция атомарна, но последовательность из них уже нет. поэтому нельзя сначала вызвать InterlockedExchangeAdd, и если значение удовлетворяет каким-то требованиям, то изменить его с помощью InterlockedExchangeAdd - на момент изменения оно уже может быть другим. Но в твоём сценарии ничего такого нет - в рабочем потоке устанавливай проценты, в vcl по таймеру считывай и отображай полученное число. Добавлено через 2 минуты и 31 секунду Конечно ты должен как-то гарантировать, что переменная существует всё время что к ней обращаются -------------------- Обижено школьников: 8 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |