Многопоточность без проблем и без АПИ, только на бейсике :)

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arthur2 » 27.05.2009 (Ср) 1:17

Кто сказал, что многопоточность на бейсике невозможна? Или что это что-то невообразимо сложное? Оказывается-то, всё просто и достигается стандартными средствами. Нет ни АПИ, ни таймеров.

Проект должен быть ActiveX.exe, в свойствах проекта установите галочку Thread per object

Одна сложность, или, скорее, необычность: нельзя использовать глобальные переменные (в том смысле, что и не получится - у каждого потока они будут свои, даже стартовая процедура будет у каждого потока своя). Так что для связи между окнами из разных потоков нужно придумывать какие-то способы :)

Вторая сложность - многопоточность появится только после компиляции, так что нужно придумывать способы отладки.

Код абсолютно минимален - чтобы легче было разобраться.
У вас нет доступа для просмотра вложений в этом сообщении.
Артур
 
   

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arvitaly » 27.05.2009 (Ср) 1:32

А у них одно адресное пространство?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16494
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение Хакер » 27.05.2009 (Ср) 1:41

Это не кирпич, а пример использования стандартных средств.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arthur2 » 27.05.2009 (Ср) 8:46

Может и не кирпич, но пример пригодился бы многим. Когда я искал пример использования этих самых стандартных средств, не нашёл НИЧЕГО. Зато часто встречал утверждения, что многопоточности в бейсике просто нет. Или - что это до жути сложно организовать :)

Кстати, а почему бы не организовать раздел именно для несложных примеров? Ну или тему создать и прикрепить?

arvitaly Не знаю, глубоко ещё не ковырял. Вроде как, должно быть одно :). Но процесс один.
Артур
 
   

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arvitaly » 27.05.2009 (Ср) 9:59

По сути должно быть одно раз процесс один. Тогда интересная находка, а вот если нет, то не вижу разницы просто exe запускать или так

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arthur2 » 27.05.2009 (Ср) 11:42

Даже если разные - в любом случае гораздо удобнее, чем разные ехе запускать. Ты же создаёшь второй поток через класс - а значит у тебя есть методы, события и свойства этого класса.

Кстати, а как проверить?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16494
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение Хакер » 27.05.2009 (Ср) 11:46

Проверить что?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arthur2 » 27.05.2009 (Ср) 12:00

arvitaly писал(а):А у них одно адресное пространство?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16494
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение Хакер » 27.05.2009 (Ср) 12:02

Проверить очень легко: перечитать MSDN, Рихтера, и понять, что раз нигде не описывается, что у процесса может быть несколько АП, значит такого не бывает.

Обычно это «интуитивно-понятно».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arthur2 » 27.05.2009 (Ср) 12:09

Ну и славно :) Значит:
arvitaly писал(а):Тогда интересная находка

Хакер писал(а):Обычно это «интуитивно-понятно».
Ну да... Только если мне что-то интуитивно понятно - ещё не факт, что я прав
Артур
 
   

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение Viper » 27.05.2009 (Ср) 14:00

arthur2 писал(а):Ну и славно :) Значит:
arvitaly писал(а):Тогда интересная находка
Ну вы, блин, даете! Этой документированной находке больше десяти лет отроду.
arthur2 писал(а):
Хакер писал(а):Обычно это «интуитивно-понятно».
Ну да... Только если мне что-то интуитивно понятно - ещё не факт, что я прав
Срочно учить основы! Ибо, каждому процессу свое адресное пространство, но не потоку!
Весь мир матрица, а мы в нем потоки байтов!

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arthur2 » 27.05.2009 (Ср) 14:35

Viper писал(а):Ну вы, блин, даете! Этой документированной находке больше десяти лет отроду.
И что? Ни одного примера в сети я не нашел. В поиске по форуму - предложения очень заковыристых способов использовать эту документированную находки и - опять же - ни одного примера :) Так что всё равно находка.

Я знал про эту фичу, но никак не мог понять, как её организовать. И написал эту штуку, как раз пытаясь разобраться. Озарение наступило, как только понял, что для каждого экземпляра объекта вызывается своя Main
Артур
 
   

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4163
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение Mikle » 27.05.2009 (Ср) 16:34

arthur2
Интересно, не знал.
Хакер
По-моему подходит в раздел "Популярные вопросы".

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arvitaly » 27.05.2009 (Ср) 16:42

Ну вы, блин, даете! Этой документированной находке больше десяти лет отроду.


Логично рассудил))
Но ни в одной из прочитанных мною книг (3 по VB6 старых еще авторов не помню), несколько по API в VB6 я этого не встретил

Срочно учить основы! Ибо, каждому процессу свое адресное пространство, но не потоку!

Да знаем, знаем, весь и вопрос один ли процесс... был вопрос, теперь вроде нет
Ты же создаёшь второй поток через класс - а значит у тебя есть методы, события и свойства этого класса.

Ну и что? Если запускать один и тот же exe, у меня тоже есть методы, события и свойства этого класса.
А вот если уметь управлять ими...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение ANDLL » 27.05.2009 (Ср) 18:28

Усраться можно с вас.
Оказывается в Vb нет многопоточности. Про функцию shell, создающую новый поток(и новый процесс) никто не слышал.
И оказывается это плюс, что в activex exe несколько потоков выполняются в одном процессе. Оказывается нам чисто умозрительный оверхед от создания нового процесса это куда большее зло чем оверхед от размещения глобальных переменных в TLS для activex exe
Вывод лично для меня - многопоточности в одном процессе, со всеми ее плюсами, позволяющую делать сложную синхронизацию и быстрый обмен внутри одного процесса в VB6 нет. И чудес не будет - если возможности нет в языке, ее нет и все...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение Viper » 27.05.2009 (Ср) 21:00

Можно сказать так, что многопоточность в VB6 есть, то есть можно созать несколько потоков, но вот толку от такой многопоточности практически никакой, ибо какой смысл в нескольких потоках, если нельзя синхронизировать потоки.
Весь мир матрица, а мы в нем потоки байтов!

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arthur2 » 28.05.2009 (Чт) 17:42

Viper писал(а):если нельзя синхронизировать потоки

А почему нельзя? Программы синхронизировать можно - почему тогда нельзя потоки?
Артур
 
   

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение ANDLL » 28.05.2009 (Чт) 18:23

Потоки синхронизировать можно. Просто нельзя передавать данные через глобальные переменные - нет никакой разницы в одном они процессе или нет. Кроме того сами глобальные переменные в activex exe при таких условиях работают медленнее
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arthur2 » 28.05.2009 (Чт) 18:30

Вообще, на сколько я понял, при таком подходе получается то же самое, что запустить несколько экземпляров программы, с той только разницей, что все экземпляры запустятся хоть и в разных потоках, но в одном процессе.
Артур
 
   

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение ANDLL » 28.05.2009 (Чт) 18:48

И это лучше чемто, что в одном процессе?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16494
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение Хакер » 28.05.2009 (Чт) 19:08

Лучше.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение ANDLL » 28.05.2009 (Чт) 19:49

И чем?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение trash » 29.05.2009 (Пт) 7:44

Тем, что в одном :lol:

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arthur2 » 29.05.2009 (Пт) 10:34

ANDLL писал(а):Просто нельзя передавать данные через глобальные переменные

Раз адресное пространство одно, можно обменяться адресами переменных, а значит всегда получить или записать любую из них.

Другое дело, что с глобальными переменными при многопоточности нужно обращаться осторожно и без особой надобности вообще ими не пользоваться.

Вот ещё вариации на тему
У вас нет доступа для просмотра вложений в этом сообщении.
Артур
 
   


arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Многопоточность без проблем и без АПИ, только на бейсике :)

Сообщение arthur2 » 29.05.2009 (Пт) 15:07

Не, ну первое - голый принцип. Там в классе даже кода нет. А вариации - они как-то сами напрашивались :)
Артур
 
   

Leshander
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 05.12.2014 (Пт) 16:32

Re: Многопоточность без проблем и без АПИ, только на бейсике

Сообщение Leshander » 05.12.2014 (Пт) 16:47

Привет всем :D !
Смотрю тут весёлые вещи разглядываете?
Есть возможность реализовать многопоточность,- это однозначно. Я как то реализовал сиее чудо через считывание 8 бит из памяти, все потоки передают 1 бит в стек, а корневая программа считывает их. Т.е. своеобразный внутренний порт получается. Не сочтите за не скромность :oops: а для чего именно нужна она вам? Я использовал для получения данных от 7 устройств одновременно с обработкой и управлением каждым. Синхронизация осуществляется внутри каждого потока по внешнему вызову. Что то типо Jtag интерфейса но внутри одной машины, так сказать внутренний язык общения с внешним миром.

Leshander
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 05.12.2014 (Пт) 16:32

Re: Многопоточность без проблем и без АПИ, только на бейсике

Сообщение Leshander » 05.12.2014 (Пт) 16:48

arthur2 писал(а):Не, ну первое - голый принцип. Там в классе даже кода нет. А вариации - они как-то сами напрашивались :)

Привет всем :D !
Смотрю тут весёлые вещи разглядываете?
Есть возможность реализовать многопоточность,- это однозначно. Я как то реализовал сиее чудо через считывание 8 бит из памяти, все потоки передают 1 бит в стек, а корневая программа считывает их. Т.е. своеобразный внутренний порт получается. Не сочтите за не скромность :oops: а для чего именно нужна она вам? Я использовал для получения данных от 7 устройств одновременно с обработкой и управлением каждым. Синхронизация осуществляется внутри каждого потока по внешнему вызову. Что то типо Jtag интерфейса но внутри одной машины, так сказать внутренний язык общения с внешним миром.

С.Т.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 10.03.2010 (Ср) 19:49

Re: Многопоточность без проблем и без АПИ, только на бейсике

Сообщение С.Т. » 19.07.2025 (Сб) 16:13

......
Последний раз редактировалось С.Т. 21.07.2025 (Пн) 10:15, всего редактировалось 1 раз.

С.Т.
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 10.03.2010 (Ср) 19:49

Re: Многопоточность без проблем и без АПИ, только на бейсике

Сообщение С.Т. » 22.07.2025 (Вт) 23:47

Ура!!!!
Удалось!
Огромное спасибо Артуру за эту идею! И за чудесный финт с CreateMutex, и за таймеры, раскрывшие потокам дыхание! Я не сразу разобрался, там несколько запутано, но зато теперь у меня этот проект превратился действительно почти что в кирпич, сделанный на чистовик, с поддержкой IDE. Приложены пять примеров в порядке нарастания сложности:
1) самый простой с одним побочным потоком, который пыхтит в долгом напряжённом цикле, а форма спокойно занимается плавным сдвижением контрола;
2) то же самое с четырьмя потоками (слегка изменён проект для уверенной отладки нескольких потоков) – там можно запускать несколько потоков и любоваться в Диспетчере задач загрузкой процессора: 25%… 50%... 75%... четвёртый уже страшно нажимать, однако и при 99% форма на всё отзывается;
3) пример для вывода снимков веб-камеры в побочные потоки, чтобы задержка снимков не задерживала форму. Особенно яркий эффект наблюдается при плохих встроенных камерах в ноутбуке или при слабом освещении: в один поток вращение происходит ступенчато (перемежаясь с выдержкой кадров!), а при многопоточности - плавно.
4) Снимки с камеры увеличиваются. Компьютеру это сложно; линейная интерполяция занимает до 100 мс на кадр, отсюда неизбежные задержки вращения, т.к. увеличение происходит в основном потоке. Это пример-проблема. Она решена в следующем проекте с помощью многопоточности:
5) Увеличение происходит в побочном потоке сразу после съёма кадра и передаётся в основную форму по указателю на данные спрайта. Вращение происходит плавно, проблема решена!

Преимущества:
1) Вот именно что можно ОТЛАЖИВАТЬ многопоточную программу без проблем. И по F8 можно следить команда за командой, и в любой момент жмём в IDE «Стоп» - все живые потоки корректно завершаются командами "End" в своих классах (можно добавить предварительное закрытие необходимых дыр в индивидуальных случаях). В данном проекте в режиме Отладки циклы автоматически превращаются в таймеры, и все потоки превращаются в фиберы и распределяются равномерно, никто не перетягивает одеяло на себя (как происходит в циклах с DoEvents, которые невозможно отлаживать, т.к. всё наперекосяк). Разумеется, интерфейс форм при IDE с нагруженными потоками работает медленно и ступенчато, но при отладке это даже удобнее.
2) Такую программу невозможно уронить и сложно повесить, нужно допустить серьёзную алгоритмическую ошибку. Просто так она никогда не вылетит. А накладные расходы на закулисный маршалинг при нынешних процессорах можно даже не принимать во внимание. Проверил передачей переменной Timer!: передача кадра с камеры в другой поток длится 0 (изредка моргает 0,00078) секунд. И где пресловутые "задержки" между потоками? Их нет. Обратный эффект я поимел в многопоточных StandardEXE по окольным путям, потому что многие OCX и DLL имеют собственную многопоточность и с любой обёрткой CreateThread'a тут же начинают драться: кое-как на сотый вариант сложишь, чтобы процесс не развалился, потом что-то поправишь - опять падает... А тут напротив: всё напрямик шуруешь из потока в поток, а он глотает и гладко работает.

Ограничения:
1) Этот проект работает корректно, если использовать многопоточность по назначению, а именно: отсылать в отдельный поток большие нагрузные задачи и глухие циклы с редким (5-10 раз в секунду) возвратом результата. Пока выполнялся цикл в отдельном потоке, форма работала, отзывалась, плавно перемещала элементы и т.д. без задержек. Если же в отдельном потоке слишком простая задача и он слишком часто передаёт результат (сотни раз в секунду), мы не заметим особой разницы с однопоточностью, поскольку в миг передачи результата поток замораживается. Но зачем простая задача в отдельном потоке? Поток на то и создаётся, чтобы выполнять длинный сложный цикл. И вот когда передача ответа от потока производится даже 10 раз в секунду, уже в полной мере ощущается многопоточность – запускается почти два ядра (на четырёхъядерном нагрузка вместо 25% составляет 40 - 45%). Почему ПОЧТИ два? Потому что процесс ПЕРЕДАЧИ результата происходит только в основном потоке, и второе ядро оказывается чуть-чуть недогружено. Но если поток передаёт ответ 1 раз в секунду, процессор нагружен уже на полные 50%, и мы видим те же результаты, что и при полноценной многопоточности.

В тестовых проектах обычно пишут в побочный поток: «Do: i=i+1: MainForm.Answer i: Loop While Doing». В таком случае второе ядро совершенно не задействуется, процессор показывает 25%, потому что второму потоку делать нечего – всё уходит только на передачу ответа. И нам кажется, что многопоточность не работает (как же, у нас же глухой цикл! – Нет, не глухой, Answer его разряжает). Но стоит перед вызовом «Answer» запустить паразитный цикл «For n=1 to 99999999: Next», как второе ядро оживает на глазах! Оно занято циклом For целую секунду! И мы видим 50% и настоящую многопоточность! И кто сказал, что встроенная многопоточность VB6 не позволяет обмениваться информацией? Отлично всё передаётся даже напрямую, через ссылку на класс потока, и можно передавать даже объектные ссылки (As Variant с дальнейшим вызовом по точке вслепую) - при обращении по таким ссылкам ПОТОК НЕ ЗАМОРАЖИВАЕТСЯ. (Ну, точнее, замораживается только если неверно что-то сделать.)

2) Хотя между потоками спокойно передаются все типы данных и даже формы (через Variant), но пока не получилось у меня передать между потоками объект стороннего класса. В моём случае спрайт SprMax класса SR2D.
Если обращаться к ThreadClass.SprMax напрямую, всё сливается в один поток.
Если в Event от ThreadClass'a поставить Set SprMax = SprMax _, сольётся при дальнейшем обращении.
Если SprMax.LoadFromSprite SprMax _, пишет «Cannot call Friend function…»
Значит, свойство Instancing класса SR2D надо делать – 1.Private. Но тогда полученную ссылку из другого потока он считает не принадлежащей своему классу и выдаёт Type mismatch. Через Variant или Set никакие преобразования не получаются.
ЕДИНСТВЕННЫЙ НАЙДЕННЫЙ ВЫХОД без хаков - передавать не объект класса, а его данные. В нашем случае - это DataPTR и Width*Height. А в другом потоке принимать эти данные обратно в класс (спрайт) через CopyMemory. Операция занимает ничтожное время (от 0 до 4 мс для полноэкранной картинки), так что выход адекватный. В примере №5 так всё и реализовано: спрайт увеличивается в отдельном потоке, а в форму передаёт указатель на свои данные, где конвертируется обратно в спрайт.

3) ActiveX EXE требует прав администратора при ПЕРВОМ запуске. Имя проекта задано трудноповторимое, и если другого проекта с тем же именем не запускать, то все дальнейшие запуски делаются без подтверждения и с обычными правами. Ну, раз уж программа доросла до многопоточности, значит наверняка уже в ней всякие OCX и DLL, и она всё равно требует установки, во время которой и будет произведен первый запуск от админа. Не говоря о том, что на многих компьютерах не работает msvbvm60, и любой VB6-программе однозначно требуется инсталляция.
Ещё такая программа не любит перемещения файла EXE, но это и всегда не приветствуется для инсталлированных программ.

4) Все MsgBox в побочном потоке нужно делать с флагом vbSystemModal, а иначе эти побочные MsgBox будут прятаться за главной формой и вешать поток.

Особенности:
В данной редакции проекта почти все Event'ы, вечно требующие внимания и синхронизации, упразднены и заменены на простые вызовы процедур. Проверял по диспетчеру и на глазок – никакой разницы в быстродействии не заметил: миг передачи параметра от потока к основной форме и так и так блокирует поток, дополнительных же расходов не заметил. А программировать гораздо удобнее, когда напрямую пишешь в одном потоке функцию или общую переменную, а из другого тут же её читаешь или меняешь, не городя паутину Event'ов. Всё равно он любые передачи маршализует.
Из потока спускать переменную в основную форму можно, по-моему, как угодно, а вот из основной формы не стоит лишний раз обращаться к классу потока, т.к. это подтормаживает всю форму на одну итерацию цикла потока, но этого, по-моему, не избежать. Вместо этого лучше из потока посылать переменные в основную форму. А вызов из осн.формы процедур потока - дело довольно редкое и обычно происходит либо в начале/конце потока, либо в момент нажатия пользователем, когда задержка незаметна.
У вас нет доступа для просмотра вложений в этом сообщении.


Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron