Обещанный рассказ о проведенных исследованиях.
Действительно, VB поддерживает многопотоковость крайне криво. Приходится искать обходные пути, чтобы ее реализовать.
Один из таких путей - написать DLL на C++, которая бы выполняля вю работу с потоками. Это конечно неудобно, зато не будет падать.
Можно сдалать и в самом VB. Есть много мнений на этот счет. Я предлагаю свое. Итак, нужно придерживаться следующих пунктов:
1. Можно воспользоваться любым из модулей поддержки многопотоковости, что были предложены ранее в этом топике. Они все облекают функцию CreateThread, поэтому особой разницы между ними нет.
2. Управляющую функцию нужно объявлять так:
- Код: Выделить всё
Public Function ThreadFunc(Param As Long) As Long
Неплохо также при выходе из нее вернуть какое-нибудь значение (по-моему принято возвращать -1 если все прошло без ошибок).
3. Важно: внутри управляющей функции должны быть только апишные вызовы. Программа становится крайне неустойчива, если встречается хотя-бы одна бейсиковская функция. Кто не верит, может попробовать такой пример:
- Код: Выделить всё
Public Function ThreadFunc(Param As Long) As Long
Call MsgBox "ThreadFunc"
ThreadFunc = -1
End Function
У меня при этом наблюдалось 100% вылетов.
4. Компилировать надо в P-код.
При соблюдении этих условий программа работает как в IDE, так и будучи скомпилированной. По крайней мере на моей машине (правда она у меня более чем быстрая, может это как-то влияет).
В любом случае, буду признателен за отзывы и замечания.