Makale numarası: 142415 - Son Gözden Geçirme: 09 Aralık 2003 Salı - Gözden geçirme: 2.0

SORUN: MFC Message Handler ile PostThreadMessage() çağırılır.

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Belirtiler

Kod PostThreadMessage() Win32 işlevini kullandığında, MFC ileti işleyicileri denir.

Neden

Iletinin, PostThreadMessage() aradığınızda iş parçacığının ileti sırasına yerleştirilir. Bu şekilde postalanan iletileri içeren bir pencere ilişkili olduğu için ancak MFC bunları ileti veya komut işleyicilerine gönderme değil. Bu iletileri işleyecek CWinApp türetilen sınıfın PreTranslateMessage() işlevi geçersiz kılmak ve iletileri el ile işlemek üzere.

Çözüm

Aşağıdaki kod PostThreadMessage() CWinApp türetilmiş sınıf tek iş parçacıklı bir uygulama kullanarak InitInstance() ilgili olarak arama gösterilmiştir. Burada gösterilen kodu, alternatif CWinThread türetilen sınıfta koyabilirsiniz dışında ilke ikincil iş parçacıkları için aynıdır.

Visual C++ 4.2 iş parçacıkları için deftere nakledilen işleme iletileri desteklemiyor. Daha fazla bilgi için Visual C++ 4.2 belgelerinde ON_THREAD_MESSAGE bakın.

Not: MFC işçi iş parçacığı, bir ileti döngüsü/kullanıcı arabirimi olan bir iş parçacığı kullanmanız gerekir; böylece ilişkili pump sahip değilsiniz.

Örnek kod

/* Compile options needed:

   standard MFC project generated by AppWizard */ 

BOOL CThreadMsgApp::PreTranslateMessage(MSG* pMsg)
{
    // Is it the Message you want?
    // You can use a switch statement but because this is
    // only looking for one message, you can use the if/else
    if (pMsg->message == WM_USER+2268)
    {
        // Call the function to handle this message
   OnReceivedCommand(pMsg->wParam,pMsg->lParam);
        // Tell MFC no more processing is needed
        return TRUE;
    }
    else
        // Call MFC to have it continue processing the message
        return CWinThread::PreTranslateMessage(pMsg);
}

BOOL CThreadMsgApp::InitInstance()
{
    WPARAM wParam;
    LPARAM lParam;
    wParam = MAKEWPARAM(0,0); // We can put whatever we
    lParam = MAKELPARAM(0,0); // want in wParam & lParam

    // Send the user-defined Thread Message
    // m_nThreadID is a member of CWinThread that holds the thread ID
    PostThreadMessage(m_nThreadID, WM_USER+2268, wParam, lParam);

    return TRUE;
}

void CThreadMsgApp::OnReceivedCommand(WPARAM wParam, LPARAM lParam)
{
    // You can do whatever you want in here, this is simply
    // sending output to the debug window
    TRACE0("Received WM_USER+2268!!\n");
}
				

Referanslar

CWinThread nesnesi hakkında daha fazla bilgi için lütfen aşağıdakilere bakın: MFC Ansiklopedi, multithreading: kullanıcı arabirimi iş parçacığı oluşturma.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 2.2
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.1 Aboneliği
Anahtar Kelimeler: 
kbmt kbprb kbthread KB142415 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:142415  (http://support.microsoft.com/kb/142415/en-us/ )
Retired KB ArticleKullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.