BUG: 다중 스레드 환경에서 GlobalMultiUse 클래스 종료 있지 않음

기술 자료 번역 기술 자료 번역
기술 자료: 300850 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

현상

두 클라이언트가 프로시저를 호출할 때 ActiveX EXE의 메모리에; 구성 요소 같은 시간 및 이 절차를 ActiveX 동적 링크 라이브러리 (DLL)이 이 클래스의 다른 ActiveX DLL 구성 요소를 그대로 유지되는 ActiveX EXE GlobalMultiUse 클래스에서 프로시저에서 액세스하는 경우, MultiUse 클래스의 다른 프로시저를 호출하는, 프로세스, 심지어 모든 종료하려면 실패한 것에 대한 참조가 릴리스되었습니다.

Visual Basic 6.0 서비스 팩 3 (SP3) 또는 이전 버전에서 이 문제가 발생하지 않습니다.

원인

현재 다른 스레드에 의해 호출되는 경우 FALSE GlobalMultiUse DLL의 DllCanUnloadNow 함수는 반환하기 때문에 이 문제가 발생합니다. GlobalMultiUse DLL 다중 스레드 환경에서 해제하려면 못할 것을 의미합니다.

해결 방법

지원되는 핫픽스를 이제 Microsoft에서 사용할 수 있지만 이 문서에서 설명하는 문제를 수정하기 위한 것일 뿐입니다. 이러한 특정 문제가 발생하는 시스템에만 적용하십시오.

참고 이 핫픽스를 구하십시오 Visual Studio 사용권 계약이 있어야 합니다.

이 문제를 해결하려면 핫픽스를 구하려면 Microsoft 기술 지원 서비스에 문의하십시오. Microsoft 고객기술지원부 전화 번호 및 지원 비용에 대한 정보를 전체 목록은 다음 Microsoft 웹 사이트를 방문하십시오.
http://support.microsoft.com/contactus/?ws=support
참고 Microsoft 기술 지원 전문가가 특정 업데이트로 문제를 해결할 수 있다고 판단하는 경우, 일반적으로 지원 호출에 발생하는 비용이 취소될 수 있습니다. 추가 지원 질문과 문제에는 특정 업데이트가 필요하지 않은 지원 비용이 적용됩니다. 이 수정의 영어 버전은 다음 파일 특성을 가집니다 또는 나중에:
   Date         Time        Version    Size     File name   
   ---------------------------------------------------------
   29 May 2001  3:32:23 PM  6.0.92.37  1.32 MB  Msvbvm60.dll
				

현재 상태

Microsoft는 Microsoft 버그가 있음을 확인했습니다 이 문서의 시작 부분에 나열된 제품에.

추가 정보

Windows Mobile 기반 스마트폰에 GPRS 연결이 구성되어 있는지 확인합니다

DLL을 함께 GlobalMultiUse 클래스 만들기

  1. Class1 기본 클래스를 사용하여 새 ActiveX DLL 프로젝트를 만듭니다.
  2. 프로젝트 메뉴에서 Project1 속성 을 클릭하십시오. GMultiUseDll 위해 프로젝트 이름을 변경하고 확인 을 클릭하십시오.
  3. 속성 대화 상자에서 6 - GlobalMultiUse Class1 인스턴싱 속성을 설정하십시오.
  4. Class1 프로그램의 코드 모듈에 다음 코드를 붙여 넣습니다.
    Public Function ClassName() As String
        ClassName = "Class1"
    End Function
    					
  5. 파일 메뉴에서 프로젝트 컴파일하려면 GMultiUseDll.dll 만들기 클릭하십시오. GMultiUseDll.dll이 만들어집니다.

DLL을 함께 MultiUse 클래스 만들기

  1. Class1 기본 클래스를 사용하여 새 ActiveX DLL 프로젝트를 만듭니다.
  2. 프로젝트 메뉴에서 Project1 속성 을 클릭하십시오. MultiUseDll 위해 프로젝트 이름을 변경하고 확인 을 클릭하십시오.
  3. 프로젝트 메뉴에서 참조GMultiUseDll.dll 확인란을 선택하고 확인 을 클릭하십시오.
  4. Class1 프로그램의 코드 모듈에 다음 코드를 붙여 넣습니다.
    Public Function GetString() As String
        GetString = ClassName
    End Function
    					
  5. 파일 메뉴에서 프로젝트 컴파일하려면 MultiUseDll.dll 만들기 클릭하십시오. MultiUseDll.dll이 만들어집니다.

ActiveX EXE 프로젝트를 만듭니다.

  1. Class1 기본 클래스를 사용하여 새 ActiveX EXE 프로젝트를 만듭니다.
  2. 프로젝트 메뉴에서 Project1 속성 을 클릭하십시오. TestServer 위해 프로젝트 이름을 변경하고 확인 을 클릭하십시오.
  3. 프로젝트 메뉴에서 참조MultiUseDll.dll 확인란을 선택하고 확인 을 클릭하십시오.
  4. 프로젝트 메뉴에서 TestServer 속성 을 클릭하십시오. 일반 탭에서 스레드 풀 10개의 스레드로 설정하십시오.
  5. Public Sub DoSomething()
        Dim obj As MultiuseDll.Class1
        Set obj = New MultiuseDll.Class1
        obj.GetString
    End Sub
    					
  6. 파일 메뉴에서 프로젝트 컴파일하려면 TextServer.exe 만들기 클릭하십시오. TextServer.exe가 만들어집니다.

클라이언트 프로젝트를 만듭니다.

  1. Form1 기본 양식을 사용하여 새 표준 EXE 프로젝트를 만듭니다.
  2. 프로젝트 메뉴에서 Project1 속성 을 클릭하십시오. TestClient 위해 프로젝트 이름을 변경하고 확인 을 클릭하십시오.
  3. 레이블 (Label1), TextBox (텍스트1) 및 (Command1 및 Command2) 두 CommandButtons Form1에 추가하십시오.
  4. Form1의 코드 모듈에 다음 코드를 붙여 넣습니다.
    Dim bStop As Boolean
    
    Private Sub Command1_Click()
        Dim oServer As Object
        Set oServer = CreateObject("TestServer.Class1")
        WaitTRUEinFile Text1.Text
        oServer.DoSomething
        Set oServer = Nothing
        Label1.Caption = "The reference was released"
    End Sub
    
    ' The purpose of this function is to synchronize the call to the
    ' GlobalMultiUse DLL through the file Sync.txt.
    Private Sub WaitTRUEinFile(sFile As String)
        Dim sFlag      As String
        Label1.Caption = "Waiting for 'TRUE' in " & sFile
        Do While bStop = False
            Open sFile For Input As #1
            Line Input #1, sFlag
            Close #1
            
            If UCase(Trim(sFlag)) = "TRUE" Then
                Exit Do
            End If
            DoEvents
        Loop
    End Sub
    
    Private Sub Command2_Click()
        bStop = True
    End Sub
    
    Private Sub Form_Load()
        Text1.Text = "c:\sync.txt"
        Command1.Caption = "Start"
        Command2.Caption = "Stop"
        bStop = False
    End Sub
    
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        bStop = True
    End Sub
    					
  5. 파일 메뉴에서 프로젝트 컴파일하려면 TestClient.exe 만들기 클릭하십시오. TestClient.exe가 만들어집니다.

테스트 실행

  1. 메모장을 엽니다. 문자 "t" 첫 번째 위치를 추가하고 Sync.txt로 드라이브의 루트에 파일을 저장하십시오.
  2. TestClient.exe 두 인스턴스를 시작하십시오. 작업 관리자에서 두 TestClient.exe 프로세스가 실행 중인지 확인하십시오.
  3. 두 인스턴스를 TestClient 시작 을 클릭하십시오.
  4. Sync.txt을 엽니다. 첫 번째 줄은 "true" 로 변경하고 저장하십시오.

    파일을 저장한 후에 TestServer.exe 프로세스 작업 관리자에서 알 수 있습니다.
  5. 폼을 닫고 두 인스턴스를 TestClient, 중지 를 클릭하십시오. TestClient.exe 실행 중인 인스턴스가 나타나지 않습니다. 이 시점에서 TestServer.exe 로드된 상태로 유지됩니다.
관련 문제에 대한 자세한 내용은 다중 스레딩에 Visual Basic에서 아래 문서 번호를 눌러 Microsoft 기술 자료에 있는 문서를 클릭합니다.
241896PRB: Visual Basic 6.0 ActiveX 구성 문제 스레딩

속성

기술 자료: 300850 - 마지막 검토: 2014년 2월 24일 월요일 - 수정: 4.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Studio 6.0 서비스 팩 4
  • Microsoft Visual Studio 6.0 서비스 팩 5
  • Microsoft Visual Basic 6.0 Enterprise Edition 서비스 팩 4
  • Microsoft Visual Basic 6.0 Enterprise Edition 서비스 팩 5
  • Microsoft Visual Basic 6.0 Professional Edition
키워드:?
kbnosurvey kbarchive kbmt kbbug kblocalsvr kbpending kbqfe KB300850 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com