Làm th? nào đ? h?n ch? các ?ng d?ng 32-bit đ?n m?t ví d? trong Visual C++

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 243953 - Xem s?n ph?m mà bài này áp d?ng vào.
Chú ý Microsoft Visual C++ 2005, Microsoft Visual C++.NET 2003, và Microsoft Visual C++.NET 2002 h? tr? c? hai m? đư?c qu?n l? mô h?nh đư?c cung c?p b?i Microsoft.NET Framework và ngu?n g?c không đư?c qu?n l? Microsoft Windows m? mô h?nh. Thông tin trong bài vi?t này ch? áp d?ng cho không đư?c qu?n l? Visual c ++ m?.
Bung t?t c? | Thu g?n t?t c?

TÓM T?T

Bài vi?t này bàn v? cách đ? gi?i h?n ?ng d?ng m?t Ví d?. Phương pháp đư?c s? d?ng trong bài vi?t này không d?a trên b?t k? sáng t?o c?a windows. V? v?y, các phương pháp có th? đư?c s? d?ng đ? gi?i h?n ?ng d?ng m?t trư?ng h?p đư?c phát tri?n trong Visual C++. Đi?u này bao g?m các ?ng d?ng giao di?n đi?u khi?n, Các ?ng d?ng winCE, h?p tho?i d?a trên ?ng d?ng, mà không có m?t giao di?n ngư?i dùng đ? h?a, và các ?ng d?ng.

THÔNG TIN THÊM

Phương pháp đư?c s? d?ng trong bài vi?t này là m?t trong đó là mô t? trong MSDN theo đ? WinMain. Nó s? d?ng các CreateMutex ch?c năng đ? t?o ra m?t mutex đư?c đ?t tên theo đó có th? đư?c ki?m tra trên quy tr?nh. Thay v? c?a nhân đôi cùng m? cho m?i ?ng d?ng mà b?n s? s? d?ng như là m?t ví d? đơn, m? mà b?n ph?i có trong m?t wrapper C++ l?p mà b?n có th? tái s? d?ng trên m?i ?ng d?ng.

Đ? s? d?ng này ch?c năng, làm theo các bư?c sau:
  1. T?o m?t t?p tin tiêu đ? m?i v?i tên LimitSingleInstance.h, và sau đó thêm nó vào d? án c?a b?n.
  2. Copy đo?n m? sau vào t?p tin LimitSingleInstance.h, và sau đó lưu t?p:
    #ifndef LimitSingleInstance_H
    #define LimitSingleInstance_H
    
    #include <windows.h> 
    
    //This code is from Q243953 in case you lose the article and wonder
    //where this code came from.
    class CLimitSingleInstance
    {
    protected:
      DWORD  m_dwLastError;
      HANDLE m_hMutex;
    
    public:
      CLimitSingleInstance(TCHAR *strMutexName)
      {
        //Make sure that you use a name that is unique for this application otherwise
        //two apps may think they are the same if they are using same name for
        //3rd parm to CreateMutex
        m_hMutex = CreateMutex(NULL, FALSE, strMutexName); //do early
        m_dwLastError = GetLastError(); //save for use later...
      }
       
      ~CLimitSingleInstance() 
      {
        if (m_hMutex)  //Do not forget to close handles.
        {
           CloseHandle(m_hMutex); //Do as late as possible.
           m_hMutex = NULL; //Good habit to be in.
        }
      }
    
      BOOL IsAnotherInstanceRunning() 
      {
        return (ERROR_ALREADY_EXISTS == m_dwLastError);
      }
    };
    #endif
    					
    Chú ý Visual C++ 2005, b?n ph?i thêm ph? bi?n h? tr? th?i gian ch?y ngôn ng? biên d?ch tùy ch?n (/ clr:oldSyntax) đ? thành công biên d?ch m?u m? trư?c đó. Đ? thêm ph? bi?n h? tr? th?i gian ch?y ngôn ng? biên d?ch tùy ch?n, h?y làm theo các bư?c sau:
    1. Nh?p vào Dự án, và sau đó nh?p vào ProjectName Thu?c tính.

      Chú ý ProjectName là m?t gi? ch? cho tên c?a d? án.
    2. M? r?ng C?u h?nh thu?c tính, và sau đó nh?p vào T?ng quát.
    3. Trong ngăn bên ph?i, nh?p vào đ? ch?n H? tr? th?i gian ch?y ngôn ng? ph? bi?n, cú pháp c? (/ clr:oldSyntax) trong các Ph? bi?n th?i gian ch?y ngôn ng? h? tr? d? án thi?t đ?t.
    4. Nh?p vào Áp d?ng, và sau đó nh?p vào Ok.
    Đ? bi?t thêm chi ti?t v? ph? bi?n h? tr? th?i gian ch?y ngôn ng? biên d?ch tùy ch?n, ghé thăm Web site sau c?a Microsoft Developer Network (MSDN):
    http://msdn2.Microsoft.com/en-US/Library/k8d11d4s.aspx
  3. # bao g?m các t?p tin LimitSingleInstance.h nơi các m?c nh?p đi?m c?a chương tr?nh có v? trí. N?u đi?u này là đ? đư?c s? d?ng trong m?t ?ng d?ng MFC, nó là t?p tin nơi các InitInstance() ch?c năng cho các ?ng d?ng có v? trí. Trong m?t Win32 SDK ?ng d?ng, nó là nơi mà các WinMain() ch?c năng có v? trí. Trong m?t ?ng d?ng giao di?n đi?u khi?n, đây là nơi các Main() ch?c năng có v? trí.
    #include "LimitSingleInstance.H"
    					
  4. T?o m?t th? hi?n toàn c?u c?a các CLimitSingleInstance l?p h?c trư?c khi đi?m nh?p hàm. N?u đi?u này đang đư?c s? d?ng trong m?t ?ng d?ng MFC, t?o th? hi?n trư?c khi các InitInstance() ch?c năng.
  5. Vư?t qua m?t tên duy nh?t cho các nhà xây d?ng c?a toàn c?u CLimitSingleInstance Ví d?. Đó khuy?n cáo r?ng b?n s? d?ng m?t tên duy nh?t cho m?t ?ng d?ng có th? s? d?ng bài vi?t này s? không xung đ?t khi làm vi?c l?p l?i ki?m tra. M?t cách d? dàng đ? có đư?c m?t tên duy nh?t mà không ai khác s? có là đ? s? d?ng công c? GUIDGEN. Đ? truy c?p vào các công c?, nh?p B?t đ?u, Nh?p vào Ch?y, và sau đó g? GUIDGEN. N?u Đ?i v?i m?t s? l? do b?n không có công c?, công c? đư?c cung c?p như m?t m?u trong MSDN. Lo?i GUIDGEN trong ch? m?c c?a MSDN đ? t?m nó. Làm cho ch?c ch?n r?ng b?n s? d?ng các Đ?nh d?ng đăng k? tùy ch?n trong GUIDGEN công c?.
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    // Change what is passed to constructor. GUIDGEN Tool may be of help.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{719967F0-DCC6-49b5-9C61-DE91175C3187}"));
    					
  6. In c?a b?n đi?m nh?p hàm, g?i cho các IsAnotherInstanceRunning() phương pháp trên th? hi?n toàn c?u c?a các CLimitSingleInstance l?p và ki?m tra giá tr? tr? l?i. N?u ch?c năng tr? v? TRUE, tr? v? t? đi?m nh?p hàm. N?u không, ti?p t?c th?c hi?n như b?nh thư?ng.

    Trong ?ng d?ng MFC, b?n có th? làm đi?u g? đó tương t? như các sau:
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{05CA3573-B449-4e0b-83F5-7FD612E378E9}"));
    
    BOOL CSingleInstDlg5App::InitInstance()
    {
        if (g_SingleInstanceObj.IsAnotherInstanceRunning())
           return FALSE; 
    
    //Rest of code.
    }
    						
    Trong m?t ?ng d?ng giao di?n đi?u khi?n, b?n có th? làm đi?u g? đó tương t? như các sau:
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{9DA0BEED-7248-450a-B27C-C0409BDC377D}"));
    
    int main(int argc, char* argv[])
    {
        if (g_SingleInstanceObj.IsAnotherInstanceRunning())
           return 0;
    //Rest of code.
    }
    						
    Trong m?t ?ng d?ng SDK Win32, b?n có th? làm m?t cái g? đó tương t? như sau:
    #include "LimitSingleInstance.H"
    
    // The one and only CLimitSingleInstance object.
    CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{2194ABA1-BFFA-4e6b-8C26-D191BB16F9E6}"));
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int cmdShow)
    {
        if (g_SingleInstanceObj.IsAnotherInstanceRunning())
           return FALSE; 
    //Rest of code.
    }
    						
Sau khi các bư?c sau, ?ng d?ng s? không cho phép nhi?u hơn m?t ví d? đ? v?n ho?t đ?ng cùng m?t lúc.

Chú ý Khi ch?y theo d?ch v? đ?u cu?i, không thêm Global\ s? đ?m b?o m?t ví d? trong d?ch v? đ?u cu?i phiên làm vi?c.
   CLimitSingleInstance g_SingleInstanceObj(TEXT("{719967F0-DCC6-49b5-9C61-DE91175C3187}"));
					
Thêm "global\" s? đ?m b?o là ch? có m?t th? hi?n c?a các ?ng d?ng trên m?t máy tính. Đi?u này áp d?ng cho dù Terminal Services đang ch?y ho?c không.

THAM KH?O

Đ? bi?t thêm thông tin, h?y b?m vào s? bài vi?t sau đ? xem bài vi?t trong Cơ s? Ki?n th?c Microsoft:
238100Làm th? nào đ? h?n ch? các ?ng d?ng MFC SDI 32-bit đ?n m?t ví d? đơn trên WinCE

Thu?c tính

ID c?a bài: 243953 - L?n xem xét sau cùng: 21 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 4.2 Enterprise Edition
T? khóa: 
kbinfo kbhowto kbuidesign kbmt KB243953 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:243953

Cung cấp Phản hồi

 

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