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

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

Модератор: 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

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 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

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

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 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 писал(а):А у них одно адресное пространство?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 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
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 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

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 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 интерфейса но внутри одной машины, так сказать внутренний язык общения с внешним миром.


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

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

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

    TopList