У меня в программке такая, понимаете, ситуация. Делаю несколько потоков. Если потом запускаю прогу прямо из Visual Basic, в первый раз всё работает нормально, а во второй при попытке создать поток возникает ошибка, типа "память не может быть "read"". Если прогу компилирую и запускаю екзешник, такая ошибка возникает уже при первой попытке. Не могу разобраться в чём дело. Помогите "крутому" программеру, если понадобится, пришлю на мыло исходник.
Если интересно, то скажу что у меня из среды, работает все нормально, но после компиляции сразу вылетает...
При этом если перекомпилю чужие примеры, ранее рабочие, они сразу начинают вылетать...
В чем дело я так и не разобрался...
Единственное что я заметил, так это то, что если "внутри" использовать цикл - все нормально, если вызвать MsgBox или обратиться к форме - происходит ошибка.
В потоках на VB можно только читать/писать глобальные переменные. Да и то только отгородившись CriticalSection.
См. Апи.
InitializeCriticalSection
EnterCriticalSection
LeaveCriticalSection
При старте программы вызываешь InitializeCriticalSection, потом создаешь поток(и) и далее всегда, хоть из какого потока любое обращение к глобальным переменным делаешь только между вызовов EnterCriticalSection и LeaveCriticalSection.
Нельзя создавать COM объекты, нельзя обращаться к формам, нельзя обращаться к COM объектам которые созданы в главном потоке приложения и т.п.
Пользы от таких потоков - ноль, а проблем - куча (как и от любых потоков).
Неплохо бы кое-что уточнить для начала. 1. речь идет о Vb6? 2. если да, то каким именно образом создается поток? (ps. можете посмотреть пример многопоточности на vbrussian.com - по-моему, в статьях. Вроде отрекомендован главным на сайте и, по слухам, работает).
У меня VB6. Потоки я создаю с помощью апишек CreateThread, TerminateThread, SuspendThread и всего такого. Я класс-модуль в Инете скачал, с помощью которого потоки создавать как нечего делать. Но траблы возникают вот... У меня в потоках происходит, во-первых, обращение к пиктуре-боксам, находящимся в форме, чтобы что-то в них нарисовать, во-вторых, обращение к глобальным переменным. Подробнее: делаю я игру. Крутую игрушку на VB. Потоки впервые мне понадобилось использовать в процессе инициализации, когда у меня одновременно прорисовывается на экран статус с крутейшими прогресс-барами, и выполняется, собственно, инициализация в другом потоке. Из среды в первый раз всё работает нормально, во второй :-o . Компилю, ваще ни фига. Может, стоит использовать другой способ создания потоков?