현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

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

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

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 웹 사이트를 방문하십시오.참고 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 = ClassNameEnd 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.GetStringEnd 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 BooleanPrivate 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    LoopEnd SubPrivate Sub Command2_Click()    bStop = TrueEnd SubPrivate Sub Form_Load()    Text1.Text = "c:\sync.txt"    Command1.Caption = "Start"    Command2.Caption = "Stop"    bStop = FalseEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)    bStop = TrueEnd 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 구성 문제 스레딩
multi-thread

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 300850 - 마지막 검토: 02/24/2014 06:04:55 - 수정: 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
피드백