Страница: 1 |
Вопрос: Проблемы с многопоточностью в VB! | Добавлено: 31.01.03 23:11 |
Автор вопроса: ![]() |
У меня в программке такая, понимаете, ситуация. Делаю несколько потоков. Если потом запускаю прогу прямо из Visual Basic, в первый раз всё работает нормально, а во второй при попытке создать поток возникает ошибка, типа "память не может быть "read"". Если прогу компилирую и запускаю екзешник, такая ошибка возникает уже при первой попытке. |
Ответы | Всего ответов: 5 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 01.02.03 00:49 |
Если интересно, то скажу что у меня из среды, работает все нормально, но после компиляции сразу вылетает... При этом если перекомпилю чужие примеры, ранее рабочие, они сразу начинают вылетать... В чем дело я так и не разобрался... Единственное что я заметил, так это то, что если "внутри" использовать цикл - все нормально, если вызвать MsgBox или обратиться к форме - происходит ошибка. |
Номер ответа: 2 Автор ответа: ![]() ![]() ICQ: 11281531 Вопросов: 1 Ответов: 14 |
Профиль | Цитата | #2 | Добавлено: 01.02.03 02:14 |
В потоках на VB можно только читать/писать глобальные переменные. Да и то только отгородившись CriticalSection. См. Апи. InitializeCriticalSection EnterCriticalSection LeaveCriticalSection При старте программы вызываешь InitializeCriticalSection, потом создаешь поток(и) и далее всегда, хоть из какого потока любое обращение к глобальным переменным делаешь только между вызовов EnterCriticalSection и LeaveCriticalSection. Нельзя создавать COM объекты, нельзя обращаться к формам, нельзя обращаться к COM объектам которые созданы в главном потоке приложения и т.п. Пользы от таких потоков - ноль, а проблем - куча (как и от любых потоков). |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 90 |
Профиль | Цитата | #3 | Добавлено: 01.02.03 15:25 |
Неплохо бы кое-что уточнить для начала. 1. речь идет о Vb6? 2. если да, то каким именно образом создается поток? (ps. можете посмотреть пример многопоточности на vbrussian.com - по-моему, в статьях. Вроде отрекомендован главным на сайте и, по слухам, работает). |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 46 Ответов: 848 |
Профиль | Цитата | #4 | Добавлено: 01.02.03 16:40 |
У меня VB6. Потоки я создаю с помощью апишек CreateThread, TerminateThread, SuspendThread и всего такого. Я класс-модуль в Инете скачал, с помощью которого потоки создавать как нечего делать. Но траблы возникают вот... У меня в потоках происходит, во-первых, обращение к пиктуре-боксам, находящимся в форме, чтобы что-то в них нарисовать, во-вторых, обращение к глобальным переменным. Подробнее: делаю я игру. Крутую игрушку на VB. Потоки впервые мне понадобилось использовать в процессе инициализации, когда у меня одновременно прорисовывается на экран статус с крутейшими прогресс-барами, и выполняется, собственно, инициализация в другом потоке. Из среды в первый раз всё работает нормально, во второй :-o ![]() |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 46 Ответов: 848 |
Профиль | Цитата | #5 | Добавлено: 02.02.03 20:43 |
|
Страница: 1 |
|