MTRECALC-Beispiel: Unterstützt von Anwendungen
Das MTRECALC-Beispiel veranschaulicht MFC-Unterstützung für Multithreadanwendungen.
MFC werden zwei Threadtypen von Threads: Benutzeroberflächenthreads und Arbeitsthreads. Ein Benutzeroberflächenthread hat über ein eigenes Nachrichtensystem für die Behandlung von Benutzeroberflächenereignisse separat von anderen Threads. Ein Arbeitsthread verfügt nicht über ein eigenes Nachrichtensystem über. MTRECALC veranschaulicht einen Arbeitsthread. Der Arbeitsthread simuliert eine längere Berechnung, indem Sie einen Zeitgeber wartet, bevor Abschluss der Berechnung von zwei Zahlen hinzufügen.
Sicherheitshinweis |
---|
Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien. |
So erhalten Sie Beispiele und Anweisungen für deren Installation:
Um Beispiele von Visual Studio zuzugreifen
im Menü Hilfe Menü klicken Beispiele.
Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.
- Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.
Erstellen und Ausführen des Beispiels
So erstellen Sie und führen im MTRECALC-Beispiel
Öffnen Sie die Projektmappe MtRecalc.sln.
erstellen Sie Menü, klicken Sie auf erstellen.
Debuggen Sie auf Menü, klicken Sie auf Starten ohne Debuggen.
MTRECALC zeigt ein einfaches Formular zum Hinzufügen von zwei Ganzzahlen, Nachbilden einer Kalkulationstabelle, die neu berechnet, wenn Sie eine Zelle zu aktualisieren oder klicken Sie auf neu berechnen. Das Ergebnisfeld zeigt "Erneut berechnen..."während der simuliert MTRECALC eine längere Berechnung. Sie können die Neuberechnungszeit ändern, indem Sie Speed of Recalculation im Menü Demo.
Klicken Sie auf Worker Thread oder Single Thread im Menü Demo, um "Erscheinungsbild" vergleichender Neuberechnung in einem separaten Arbeitsthread und die Neuberechnung im selben Thread als Benutzeroberflächenthread Hauptanwendung. Beispielsweise können in der Demo Single Thread Sie nicht zugreifen die MTRECALC-Menüs wird es neu berechnen, jedoch in der Demo Worker Thread können Sie. In der Demo Single Thread können nicht aktualisieren eines der Ganzzahlfelder MTRECALC Neuberechnung, jedoch in der Demo Worker Thread können Sie. Wenn Sie ein Feld, aktualisieren während der Arbeitsthread bereits Neuberechnung ist, wird die aktive Neuberechnung abgebrochen, und eine neue gestartet.
Befehl Kill Worker Thread im Menü Demo ist aktiviert, nur während der Arbeitsthread eine Neuberechnung durchführt. Wenn Sie Befehl Kill Worker Thread, verwenden um die Neuberechnung zu unterbrechen, bevor er abgeschlossen ist, zeigt das Ergebnisfeld ein Fragezeichen ("?"). Sie können die Berechnung mit Befehl Recalculate Now erneut beginnen.
Wenn Sie versuchen, das MTRECALC-Dokument zu speichern, bevor die Neuberechnung abgeschlossen ist, werden Sie aufgefordert werden mit "Möchten Sie warten, während die Neuberechnung abgeschlossen ist?" Wenn Sie mit Ja antworten, zeigt MTRECALC eine Sanduhr, während er wartet, dass die Neuberechnung zu beenden, bevor das Dokument speichern. Um die Übung in dieser Demo werden wahrscheinlich müssen Sie verwenden -Befehl Speed of Recalculation um die Neuberechnungszeit vom Standardwert 5 Sekunden auf 10 zu erhöhen oder 15 Sekunden. Dadurch erhalten Sie genügend Zeit zum Navigieren durch die Dateimenü und speichern im Dialogfeld.
Schlüsselwörter
Dieses Beispiel demonstriert die Verwendung der folgenden Schlüsselwörter:
AfxBeginThread; AfxGetMainWnd; AfxMessageBox; CArchive::IsStoring; CCmdTarget::BeginWaitCursor; CCmdTarget::EndWaitCursor; CCmdUI::Enable; CCmdUI::SetCheck; CDialog::DoModal; CDocument::GetFirstViewPosition; CDocument::GetNextView; CDocument::OnNewDocument; CDocument::OnSaveDocument; CDocument::SetModifiedFlag; CDocument::UpdateAllViews; CFrameWnd::Create; CFrameWnd::DockControlBar; CFrameWnd::EnableDocking; CFrameWnd::LoadFrame; CObject::AssertValid; CObject::Dump; CObject::Serialize; CStatusBar::CommandToIndex; CStatusBar::SetPaneText; CString::Format; CString::LoadString; CView::DoPreparePrinting; CView::GetDocument; CView::OnBeginPrinting; CView::OnEndPrinting; CView::OnPreparePrinting; CView::OnPrint; CView::OnUpdate; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::RegisterShellFileTypes; CWnd::DoDataExchange; CWnd::OnCreate; CWnd::OnKillFocus; CWnd::PostMessage; CWnd::SendMessage; CWnd::SetWindowText; CWnd::ShowWindow; CWnd::UpdateData; CWnd::UpdateWindow; CreateEvent; DragAcceptFiles; GetExitCodeThread; GetVersion; LoadBitmap; PostMessage; ResetEvent; SetEvent; Sleep; WaitForSingleObject
Hinweis
Einige Beispiele, z. B. eine, wurden nicht geändert, um Änderungen in der Visual C++-Assistenten, Bibliotheken und Compiler, demonstrieren aber dennoch wie Sie die gewünschte Aufgabe durchführen.