문제

나는 많은 타사 라이브러리와 컨트롤을 갖춘 레거시 대규모 VB6 편집기를 보유하고 있으며 최근에는 메인 편집기 양식과 독립적으로 몇 가지 다른 양식을 실행할 수 있도록 멀티 스레드를 만들기 위해 설정해야합니다. 기본적으로 메인 페이지에서 버튼을 클릭하여 다른 양식을 실행하는 것을 제외하고는 이러한 다른 양식과 메인 편집기간에 최소한의 통신이 있습니다.

따라서 많은 인터넷 검색에서 현재 앱을 ActiveX EXE로 설정하고 클래스를 Global-Multi-use에 추가하여이를 수행 할 수 있도록 현재 앱을 멀티 스레딩으로 변환하는 메소드를 찾았습니다. 이제 디버깅 모드를 통해 편집 및 테스트를 수행하는 동안, 나는 종종 종료 할 때 때때로 많은 이상한 충돌이 발생한다는 것을 알았습니다.

'main.frm - button click call
'On the button click, create a new object
Set obj = CreateObject("MyApp.clsThread")
Call obj.NewThread

'clsThread
' Create a new form and load it to run on a new thread
Public Sub NewThread()
    Dim frm As Object
    Set frm = New frmDogbert
    Load frmDogbert
    frm.show
    Set frm = Nothing
End Sub

그래서 앱이 더 불안정 해지는 것처럼 보이기 때문에, 내가 이것을 할 때, 즉 잠재적 인 문제 등을 할 때 무엇을 절대적으로 알아야합니까? 아니면 더 좋은 방법이 있습니까?

업데이트 :

내 앱을 의사 멀티 스레딩 앱으로 강력하게 해킹하는 대신, 나는 좋은 사람들의 조언을 가져 와서 구성 요소를 표준 exe로 리팩토링하고 내 앱을 표준 exe로 되 돌리고 쉘을 통해 호출했습니다. 아름답게 작동합니다 :)

감사

도움이 되었습니까?

해결책

Visual Basic 6은 그 자체로 멀티 스레딩이 아닙니다. ActiveX EXE와 ActiveX DLL 사이의 멀티 태스킹 거동의 차이는 다른 VB6 EXE에서 참조 할 때만 분명합니다. ActiveX EXE 실행에 정의 된 글로벌 다용도 클래스에서 인스턴스화 된 개체는 자신의 맥락에서 실행됩니다. ActiveX DLL에서 인스턴스화 된 객체는 호출 exe의 맥락에서 실행됩니다.

이제 멀티 스레딩은 vb6으로 해킹 될 수 있지만 매우 터치이며 많은 DON이 있습니다 (예 : IDE에서 정지 버튼을 사용하여 디버깅 세션을 중지하거나 프로그램이 충돌합니다).

ActiveX Exe가 좋은 것은 메인 프로그램을 중단하지 않고 별도로 실행할 수있는 별도의 관련 인스턴스를 산란하는 것입니다. 당신의 간단한 설명을 바탕으로 나는 당신의 가장 좋은 것이 당신의 exe를 그대로 유지하는 것입니다. 그러나 더 많은 양식/모듈/클래스를 별도의 exe로 유지하고 원래 exe 참조 ActiveX Exe를 참조하십시오.

.exe로 컴파일 할 필요가 없습니다. 확장을 .dll로 변경할 수 있으며 여전히 ActiveX Exe입니다. 사용자가 ActiveX EXE를 자체적으로 실행하지 않도록이 작업을 수행합니다.

다른 팁

질문을 조금 명확히 할 수 있습니까? 왜 멀티 스레드가 필요한지 이해가 안 돼요? 왜 비 모달 형식을 표시 할 수 없는가? 주요 형태로 항상 작동하는 배경 처리가 없다면, 다른 형식뿐만 아니라 다른 형태를 잠그기 때문에 질문에서 나오지 않을 것입니다.


Melaos의 말 : 메인 편집기 FRM은 여기서 가장 중요한 것입니다. 사용자가 서버에 물건을 업로드하고 비디오 파일을 다른 형식으로 변환하는 것과 같은 다른 작업을 수행하기 위해 추가 양식을 실행하도록 허용해야합니다. 이 양식은 쉘을 사용하여 다른 예방을 호출합니다. 그리고 달리기 시간은 꽤 시간이 걸립니다.


이 경우 다른 형태를 멀티 스레딩을 사용하기보다는 별도의 예방으로 만드는 것이 좋습니다. 당신은 기본 형식에서 하위 형태로의 의사 소통이 거의 없다고 말합니다. 따라서 Subforms ActiveX Exes를 만들 필요조차 없습니다. 표준 exes로 만들고 기본 형태에서 껍질을 벗기십시오.

하지 마십시오. 멀티 스레딩은 도구를 사용하는 도구를 사용하더라도 올바르게 수행하기에 엄청나게 복잡합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top