Привет,
Помогите новичку.
Есть ActiveX (для IE) на VB, нужно банально выделить функцию в отдельный поток, но банально это было в С++, а тут...
Все примеры, от "производителя" валятся на завершении потока. Что это?
Может у кого есть проверенный рецепт ?
Спасибо всем,
Виктор
Re: CreateThread в VB6
От:
Аноним
Дата:
06.08.01 10:27
Оценка:
Здравствуйте VictorV, вы писали:
VV>Привет, VV>Помогите новичку. VV>Есть ActiveX (для IE) на VB, нужно банально выделить функцию в отдельный поток, но банально это было в С++, а тут... VV>Все примеры, от "производителя" валятся на завершении потока. Что это? VV>Может у кого есть проверенный рецепт ?
VV>Спасибо всем, VV>Виктор
На VB у меня получилось реализовать многопоточное приложение только так: создается ActiveX.exe с Threading Model: Thread per Object и в нем class, назовем его, скажем, VControl. Чтобы создать поток надо создать экземпляр класса VControl. Если в новом потоке надо запустить какую-то задачу параллельно главному потоку, то сделать это можно например так: завести скрытую форму (называемую, скажем, frmProcess), создавать ее при создании объекта VControl. VControl должен иметь Property Get HWND() as Long, которое будет возвращать hwnd созданного окна. Тогда запускать какуй-нить задачу можно так Call PostMessage(ctl.HWND, WM_USER+100, 0, 0). Предварительно у скрытой формы должен быть организован субклассинг (или как там это по-умному называется :), и в обработчике события WM_USER+100 должны вызываться реализация задачи.
Здравствуйте VictorV, вы писали:
VV>Помогите новичку. VV>Есть ActiveX (для IE) на VB, нужно банально выделить функцию в отдельный поток, но банально это было в С++, а тут... VV>Все примеры, от "производителя" валятся на завершении потока. Что это? VV>Может у кого есть проверенный рецепт ?
Выделять отдельную функцию Ax-а (не рассчитанного на многопоточность) в отдельный поток очень опасно! Если есть возможность, лучше создавать отдельные копии Ax-ов в разных потоках. Тогда все должно заработать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, вы писали:
VD>Здравствуйте VictorV, вы писали:
VV>>Помогите новичку. VV>>Есть ActiveX (для IE) на VB, нужно банально выделить функцию в отдельный поток, но банально это было в С++, а тут... VV>>Все примеры, от "производителя" валятся на завершении потока. Что это? VV>>Может у кого есть проверенный рецепт ?
VD>Выделять отдельную функцию Ax-а (не рассчитанного на многопоточность) в отдельный поток очень опасно! Если есть возможность, лучше создавать отдельные копии Ax-ов в разных потоках. Тогда все должно заработать.
Спасибо за ответ. Проблему решили просто: создали АХ на VС, в нем запустили поток, а уже в нем подсоединили бейсиковский АХ. Все работает.
ЗЫ: Больше не буду пытаться в Бейсике вызывать CreateThread...