Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Проблемы с многопоточностью в VB! Добавлено: 31.01.03 23:11  

Автор вопроса:  Страшный Сон

У меня в программке такая, понимаете, ситуация. Делаю несколько потоков. Если потом запускаю прогу прямо из Visual Basic, в первый раз всё работает нормально, а во второй при попытке создать поток возникает ошибка, типа "память не может быть "read"". Если прогу компилирую и запускаю екзешник, такая ошибка возникает уже при первой попытке.  Не могу разобраться в чём дело. Помогите "крутому" программеру, если понадобится, пришлю на мыло исходник.

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 01.02.03 00:49

Если интересно, то скажу что у меня из среды, работает все нормально, но после компиляции сразу вылетает...

При этом если перекомпилю чужие примеры, ранее рабочие, они сразу начинают вылетать...

В чем дело я так и не разобрался...

Единственное что я заметил, так это то, что если "внутри" использовать цикл - все нормально, если вызвать MsgBox или обратиться к форме - происходит ошибка.

Ответить

Номер ответа: 2
Автор ответа:
 Semjon



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

 Теперь у меня есть Type Library, сваяная на C++, надо её как-то использовать, есть у меня примерчик один, но под XP он виснет.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам