2016-05-03 2 views
0

Мой вопрос касается многопоточности в VB 6. Это, кажется, устаревший вопрос, так как сейчас люди используют VB 6.VB 6 Многопоточность путаницы

Определенно, родной VB 6 не поддерживает многопоточность напрямую. Поэтому я создаю dll C++ и выставляю метод, который вызывает CreateThread, чтобы создать рабочий поток и некоторые другие методы для управления потоком. Поток кажется прекрасным.

Чтобы уведомить об этом приложение VB 6, сначала передайте Me.hWnd в dll и зацепите WndProc перед созданием потока. Затем вызовите SendMessage в hWnd, где это необходимо. Кажется, это тоже хорошо.

Является ли этот метод стабильным для использования многопоточности в VB 6? Мне действительно нужна твоя помощь!

PS: Как насчет SHCreateThread API вместо CreateThread?

+0

Вы должны вызвать 'SendMessage' в потоке, на котором создан' hWnd'. То, что вы делаете, будет дымиться в тот момент, когда вы его произведете. (FYI, VB6 поддерживает потоковую передачу через EXE-файлы ActiveX.) – wqw

+0

@wqw SendMessage (я меняю его на PostMessage для предотвращения потенциальных блоков) вызывается в потоке C++, а не в потоке «UI» (или Main). Я полагаю, что сообщение отправляется по потокам. Почему вы думаете, что это не сработает? –

+0

Обзор (со ссылками на дополнительное чтение) о том, как VB6 обрабатывает потоки, см. [This] (https://msdn.microsoft.com/en-us/library/aa261361 (v = vs.60) .aspx). «In-process component» - это ActiveX DLL. «Out-of-process component» - это ActiveX EXE. – BobRodes

ответ

0

Я не уверен в вашем подходе .dll, но на самом деле есть несколько трюков, которые вы можете использовать в VB6 для создания дополнительных потоков, вроде. Если вы отбрасываете объект таймера в своей форме, установите для него огонь, скажем, 1 мс, timerevent, который срабатывает, будет в отдельном потоке. Оттуда вы можете вызывать любые другие функции, которые вам нужны. Я часто использовал этот трюк в фоновом режиме и многое другое.

Pro Подсказка: немедленно отключите таймер после того, как он начнет огонь или произойдет хаос.

+0

Таймеры огня на той же теме. Я позитивный. – wqw

+0

Он может запустить поток таким образом, но не сможет его контролировать. –

+0

@guanboshen Ни один поток не запускается с использованием элементов управления таймером VB6. – wqw

Смежные вопросы