Надоевший вопрос о потоках!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Залетин ВиталийВикторович
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 2
Зарегистрирован: 12.11.2005 (Сб) 15:52
Откуда: Украина, Кировоград

Надоевший вопрос о потоках!

Сообщение Залетин ВиталийВикторович » 12.11.2005 (Сб) 16:11

:oops: У меня вопрос такого плана: есть ли где в инете нормальные материалы на тему потоков в VB. Облазил много чего, но все локальные решения. Кокретно интересует вопрос: возможно ли написать компоненту, которая бы запускала в отдельном потоке ЛЮБОЙ код. И еще: интересно было бы узнать как вообще устроена система многопоточности - что там внутри? :oops: :oops: :oops: :oops: :?:
Учиться никогда не поздно! Особенно программированию...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.11.2005 (Сб) 16:38

Написать можно, но работать без ошибок не будет, ну нет в VB6 нормальной поддержки многопоточности.

А компонента есть (откуда скачал не помню), от она:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 12.11.2005 (Сб) 16:44

Отсюда класс?
Последний раз редактировалось Amed 12.11.2005 (Сб) 17:12, всего редактировалось 1 раз.

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

Сообщение ANDLL » 12.11.2005 (Сб) 17:03

Залетин ВиталийВикторович писал(а):Кокретно интересует вопрос: возможно ли написать компоненту, которая бы запускала в отдельном потоке ЛЮБОЙ код.

Конечно!
Только требуеться, что бы этот код поддерживал многопоточность. А у VB с эти проблемы...
2Amed:Такое ощущение, что все помешались на этом примере.
Ну нет там многопоточности. НЕТ! В отдельном потоке выполянеться вызов одной единтсвенной API функции и только потому программа не рушиться. Стоит написать в потоке что-то типа A=Left(B,5) и все. На этом многопоточность заканчиваеться...
2keks-n:Собственно, то же самое...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Сообщение ANDLL » 12.11.2005 (Сб) 18:25

FleX_2004 писал(а):Кста... трасиируя в отладчике седня свою прогу с удивлением заметил что в ВБ проблемы с много поточностью только у программиста =) гы.. в проге сам я НЕ создаю ни одного лишного потока кроме майна, в то время как ProcCallEngine нашего любимого msvbvm60 создает Аж 2 дополнительных потока для каждого МОДУЛЯ, вызываемого из Main

Запустил немаленькую прогу, написанную на VB, поставил breakpoint на NtCreateThread. Не разу не пикнуло. Не знаю, где ты там увидел, что VB создает новые потоки...
всвязи с чем любой модуль, вызываемый из майна запускается в виртуальной памяти...

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

Что за модуль? Модуль в понимании Win32, модуль как тип файла бейсика, или модуль это любой VB-файл?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.11.2005 (Сб) 18:52

Взял свою старую прогу наугад, запустил, посмотрел - 3 нити.
Одна в EXE, одна в kernel32.BaseThreadStartThunk, одна в rpcrt4.ThreadStartRoutine
Если кому интересно, могу дать кол-стеки.
Изображение

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

Сообщение ANDLL » 12.11.2005 (Сб) 18:57

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.11.2005 (Сб) 19:05

Выходит так.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.11.2005 (Сб) 23:03

7Сххххххх - это системные библиотеки WinNT. Лучше по этим адресам не химичить.
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 13.11.2005 (Вс) 0:06

О Господи... Flex, что у тебя за проект?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.11.2005 (Вс) 0:29

FleX_2004 писал(а):да в том то и вся феня что почему то именно там и исполняется МОЙ код!!!! ужас ЛЮДИ просвятите темного!

Да почему же ты решил, что там исполняется ТВОЙ код? :roll:
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 13.11.2005 (Вс) 16:59

От он РАБОТАЮЩИЙ :!: пример, в котором идет изменение переменных, взаимодействие с формой и всё такое.
Вложения
multithreading_in_vb.zip
(15.58 Кб) Скачиваний: 32

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 13.11.2005 (Вс) 17:03

Ага. И компилируется в P-Code. Со всеми вытекающими.
Моду создают модоки, а распространяют модозвоны.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 13.11.2005 (Вс) 17:07

Но работает-же, а чем тя P-код не устраевает?
Изображение

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 13.11.2005 (Вс) 17:41

P-Code медленный и под него есть куча декомпиляторов.

А вот эта библиотека позволяет делать многопоточность в Native-коде.
http://planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=1&txtCodeId=26900
Там для вызова API-функций используется TLB.

Правда, не рекомендую использовать этот метод, не сохранив парочки резервных копий проекта... на всякий случай. И еще: объект Err и стандартный файловый ввод-вывод работать не будут. (проверено).
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 13.11.2005 (Вс) 17:42

И обязательно НАДО прочитать статью ПЕРЕД использованием. Иначе возможны проблемы :twisted:
Моду создают модоки, а распространяют модозвоны.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.11.2005 (Ср) 14:02

Гм, ИМХО, проще ActiveX EXE нарисовать.

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

Сообщение ANDLL » 16.11.2005 (Ср) 15:04

Вот тут я согласен.
Сам не пробовал, но есть подозрения, что уж в Ax EXE многопотчносуть должна работать.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.11.2005 (Ср) 17:24

Да, есть, причем "легальная". В свойствах проекта просто мультитредовость надо выставить.
Lasciate ogni speranza, voi ch'entrate.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 16.11.2005 (Ср) 19:18

Между прочим, в формулировке темы значилось исполнение ЛЮБОГО кода, а не только кода класса из ActiveX EXE.

Есть, кстати, кое-какие плюсы у "нелегальной" реализации. К примеру, при работе с "легальной" многопоточностью автоматического переключения нитей при исполнении синхронных задач нет:
MSDN писал(а):Asynchronous Tasks
Visual Basic doesn't provide a way to fork execution - that is, to have one thread initiate a method call on a new thread and immediately resume processing on the original thread. You can simulate this behavior in your test application by having the original method call turn on a timer and then return immediately. When the timer event occurs, you can turn the timer off and perform the asynchronous processing. This technique is discussed in "Asynchronous Call-Backs and Events", and is demonstrated (see "Creating an ActiveX Exe Component") and in the Coffee sample application.
(см. статью "Creating a Multithreaded Test Application")

А у "нелегальной" - переключение успешно происходит. Правда, от этого больше проблем, чем преимуществ.
Моду создают модоки, а распространяют модозвоны.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 17.11.2005 (Чт) 16:35

hCORe писал(а):Между прочим, в формулировке темы значилось исполнение ЛЮБОГО кода, а не только кода класса из ActiveX EXE.


А кто мешает из класса вызвать этот "ЛЮБОЙ" код?
Последний раз редактировалось keks-n 17.11.2005 (Чт) 16:37, всего редактировалось 1 раз.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.11.2005 (Чт) 16:37

keks-n писал(а):А кто мешает из класса вызвать этот ЛЮБОЙ код?

Попробуй, узнаешь.
Lasciate ogni speranza, voi ch'entrate.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 17.11.2005 (Чт) 16:39

Alibek, поясни пожалуйста.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 17.11.2005 (Чт) 18:04

Чем, хотелось бы знать? И какой именно код незя выполнить?

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

Сообщение ANDLL » 17.11.2005 (Чт) 18:35

2keks-n:Тебе же сказали, попробуй. Ну что может быть проще?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

След.

Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 196

    TopList  
cron