powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создание *.exe из проекта с потоками
3 сообщений из 3, страница 1 из 1
Создание *.exe из проекта с потоками
    #34100528
Slice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал програмку с использованием потоков и так как у меня встречаются такие вещи как CreateObject, пришлось использовать
Код: plaintext
Call CoInitialize( 0 )
и
Код: plaintext
Call CoUninitialize
.
И вот вопрос. В самом бэйсике при открытом проекте, программа работает. А вот когда создаю экзэшник, то виндоус выдает ошибку. Компилировал и P-code и Native code, все равно ОШИБКА.


И еще вопросик.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
On Error Resume Next
With ThreadFirst
    .Initialize AddressOf VeryBusyProcess
    .Priority = THREAD_PRIORITY_IDLE
    .Enabled = True
End With
With ThreadSecond
    .Initialize AddressOf CurrentProcess
    .Priority = THREAD_PRIORITY_IDLE
    .Enabled = False
End With
Вот так запускаю процессы (тоесть один процесс, второй пока не берем)
потом удет процедура VeryBusyProcess в модуле в которой как раз и находятся функции CoInitialize(0) и CoUninitialize. Между ними сам код процедуры.
Так же есть кнопка выхода (тоесть код еще весь не отработал, а я могу прервать выполнение) и она выглядит так

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Command2_Click()
    Call CoUninitialize
    Set ThreadFirst = Nothing
    Set ThreadSecond = Nothing
    
    Unload Me
End Sub

Эта кнопка все закрывает, а в диспечере задач все равно весит эта программа
может быть кто-нибудь сталкивался с этим. Помогите пожалуйста
...
Рейтинг: 0 / 0
Создание *.exe из проекта с потоками
    #34102188
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SliceИ вот вопрос. В самом бэйсике при открытом проекте, программа работает. А вот когда создаю экзэшник, то виндоус выдает ошибку. Компилировал и P-code и Native code, все равно ОШИБКА.А ты синхронизацию доступа к ком-объектам делаешь? Нет? Ну вот и получаешь.

Sliceпотом удет процедура VeryBusyProcess в модуле в которой как раз и находятся функции CoInitialize(0) и CoUninitialize.
1) вынеси CoInitialize/CoUninitialize в главный тред.
2) орагнизуй у себя собственную синхронизацию доступа к ком-объектам, либо запускай CoInitialize(2)

Slice(тоесть код еще весь не отработал, а я могу прервать выполнение) и она выглядит так
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Command2_Click()
    Call CoUninitialize
    Set ThreadFirst = Nothing
    Set ThreadSecond = Nothing
    
    Unload Me
End Sub
Это не прерывание выполнения. Это оставление треда в памяти. Тред надо сначала остановить, потом уже убить ссылку на него.
...
Рейтинг: 0 / 0
Создание *.exe из проекта с потоками
    #34108193
Slice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl А ты синхронизацию доступа к ком-объектам делаешь? Нет? Ну вот и получаешь.
2) орагнизуй у себя собственную синхронизацию доступа к ком-объектам, либо запускай CoInitialize(2)
Это не прерывание выполнения. Это оставление треда в памяти. Тред надо сначала остановить, потом уже убить ссылку на него.


Можно поподробнее по этим пунктам. что надо написать и куда вставить?
или ссылку дай пожалуйста. Тяжеловато без теории пытаться что-нть сделать
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создание *.exe из проекта с потоками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]