CreateThread в VB6
От: VictorV  
Дата: 01.08.01 14:30
Оценка:
Привет,
Помогите новичку.
Есть 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 должны вызываться реализация задачи.

Best regards, Vi'k (yvitalyv@mail.ru).
Re: CreateThread в VB6
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.08.01 11:52
Оценка:
Здравствуйте VictorV, вы писали:

VV>Помогите новичку.

VV>Есть ActiveX (для IE) на VB, нужно банально выделить функцию в отдельный поток, но банально это было в С++, а тут...
VV>Все примеры, от "производителя" валятся на завершении потока. Что это?
VV>Может у кого есть проверенный рецепт ?

Выделять отдельную функцию Ax-а (не рассчитанного на многопоточность) в отдельный поток очень опасно! Если есть возможность, лучше создавать отдельные копии Ax-ов в разных потоках. Тогда все должно заработать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: CreateThread в VB6
От: VictorV  
Дата: 07.08.01 15:21
Оценка:
Здравствуйте VladD2, вы писали:

VD>Здравствуйте VictorV, вы писали:


VV>>Помогите новичку.

VV>>Есть ActiveX (для IE) на VB, нужно банально выделить функцию в отдельный поток, но банально это было в С++, а тут...
VV>>Все примеры, от "производителя" валятся на завершении потока. Что это?
VV>>Может у кого есть проверенный рецепт ?

VD>Выделять отдельную функцию Ax-а (не рассчитанного на многопоточность) в отдельный поток очень опасно! Если есть возможность, лучше создавать отдельные копии Ax-ов в разных потоках. Тогда все должно заработать.


Спасибо за ответ. Проблему решили просто: создали АХ на VС, в нем запустили поток, а уже в нем подсоединили бейсиковский АХ. Все работает.
ЗЫ: Больше не буду пытаться в Бейсике вызывать CreateThread...

C уважением, Виктор
Re[3]: CreateThread в VB6
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.08.01 19:45
Оценка:
Здравствуйте VictorV, вы писали:

VV>ЗЫ: Больше не буду пытаться в Бейсике вызывать CreateThread...


Очень верное решение. :) Однако, в VB.Net (7.0) потоки поддерживаются напрямую.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.