Share via


Ejemplo MTRECALC: ejemplo de compatibilidad con aplicaciones multiproceso

Actualización: noviembre 2007

El ejemplo MTRECALC ilustra la compatibilidad que ofrece MFC para las aplicaciones con varios subprocesos.

MFC distingue entre dos tipos de subprocesos: de interfaz de usuario y de trabajo. Un subproceso de interfaz de usuario tiene su propio suministro de mensajes para controlar los eventos de la interfaz de usuario por separado de los demás subprocesos. Un subproceso de trabajo no tiene su propio suministro de mensajes. MTRECALC ilustra el uso de un subproceso de trabajo. El subproceso de trabajo simula un cálculo largo y espera a que se alcance el tiempo establecido en un temporizador antes de completar el cálculo consistente en sumar dos números.

Nota de seguridad:

Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para obtener ejemplos e instrucciones para su instalación:

  • En el menú Ayuda de Visual Studio, haga clic en Ejemplos.

    Para obtener más información, vea Localizar archivos de ejemplo.

  • La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.

  • También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones Express de Visual Studio, todos los ejemplos están en línea.

Generar y ejecutar el ejemplo

Para generar y ejecutar el ejemplo MTRECALC

  1. Abra la solución MtRecalc.sln.

  2. En el menú Generar, haga clic en Generar.

  3. En el menú Depurar, haga clic en Iniciar sin depurar.

MTRECALC muestra un formulario sencillo para sumar dos enteros, que simulan una hoja de cálculo en la que se actualiza el cálculo siempre que se actualice una celda o se haga clic en Recalculate Now. El campo de resultados muestra "Recalculating..." mientras MTRECALC simula un cálculo largo. Puede cambiar el tiempo de actualización del cálculo; para ello, haga clic en el comando Speed of Recalculation del menú Demo.

Haga clic en el comando Worker Thread o Single Thread del menú Demo para comparar la "sensación" que ofrece la actualización del cálculo en un subproceso de trabajo independiente con la que ofrece la actualización en el mismo subproceso de la interfaz de usuario de la aplicación principal. Por ejemplo, en la demostración de un solo subproceso, no se puede tener acceso a los menús de MTRECALC mientras se actualiza el cálculo; en cambio, en la demostración del subproceso de trabajo sí se puede. En la demostración de un solo subproceso no se puede actualizar ninguno de los campos de valores enteros mientras MTRECALC actualiza el cálculo; en cambio, en la demostración del subproceso de trabajo sí se puede. Si actualiza un campo mientras el subproceso de trabajo actualiza el campo, se abandonará la actualización activa y se iniciará una nueva.

El comando Kill Worker Thread del menú Demo sólo estará habilitado mientras el subproceso de trabajo actualice el cálculo. Si utiliza el comando Kill Worker Thread para interrumpir la actualización del cálculo antes de que se haya completado, el campo de resultado mostrará un signo de interrogación ("?"). Puede reiniciar el cálculo con el comando Recalculate Now.

Si intenta guardar el documento MTRECALC antes de que se haya completado la actualización del cálculo, se le preguntará si desea esperar a que finalice la actualización del cálculo. Si responde afirmativamente, MTRECALC mostrará un reloj de arena mientras espera a que se complete la actualización del cálculo antes de guardar el documento. Para realizar esta demostración, es probable que tenga que utilizar el comando Speed of Recalculation para aumentar el tiempo de actualización del cálculo de los 5 segundos predeterminados a 10 o 15 segundos. Esto le dará tiempo suficiente para navegar por el menú File y el cuadro de diálogo Save.

Palabras clave

En este ejemplo, se muestra el uso de las siguientes palabras clave:

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

Nota:

Algunos ejemplos, como éste, no se han modificado para reflejar los cambios en los asistentes, las bibliotecas y el compilador de Visual C++, pero, aun así, muestran cómo realizar la tarea deseada.

Vea también

Otros recursos

Ejemplos de MFC