Hvordan bruke Threading og meldinger i Visual C ++

Prosesser som kjører i bakgrunnen, som de som vises av Hendelsesliste-programmet i Windows, kan implementeres i Visual C ++ med MFC arbeider tråden. I denne opplæringen den OnOK kommando av en Dialog brukes til å ringe AfxBeginThread som igjen kaller en funksjon som lagrer data i en tekstfil - den Worker tråden.

Bruksanvisning

1 Lag en MFC Dialog i Microsoft Visual Studio. Gi den navnet MyGUI. Hvis du er usikker på hvordan dialogbokser er laget i Visual C ++, lese "Make MFC dialogbokser i MFC."

2


Kopier og lim inn følgende kode i MyGUI.cpp. Dette fungerer som Worker tråden i programmet.

UINT Process (LPVOID param)

{

CFile fil;

file.Open ( "C: \\ ... \\ mittprosjekt \\ test.txt", CFile :: modeCreate | CFile :: modeWrite);

Cstring strValue;

for (int i = 0; i <100; i ++)

{

strValue.format ( "Number:% d", i);

file.Write (strValue, strValue.GetLength ());

}

file.Close ();

return true;

}

3


Generere OnOK kommandoen funksjon av MyGUI Dialog å sette inn AfxBeginThread funksjon. Hvis du er usikker på hvordan kommandofunksjoner er opprettet i Visual C ++, lese eHow artikkelen "Hvordan lage kommandoknapper i MFC-dialogbokser."

Sett inn denne koden

AfxBeginThread (Process, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);

Messagebox ( "Tråd i gang");

inn i denne funksjonen:

ugyldig CMyGUIDlg :: OnOK ()

{

// Legg koden her

}

Legg merke til at den første parameter i AfxBeginThread funksjon er navnet på funksjonen som utføres som en Worker tråd.

4

Bygg og kjøre programmet. Klikk på OK-knappen. Dette utløser Worker tråden. For å bevise at det utføres, finne filen "test.txt" under "mittprosjekt" -mappen eller hva du heter prosjektmappen. Åpne filen for å bekrefte at data har blitt skrevet til den.

Hint

  • Hvis AfxBeginThread funksjonen ble kalt flere ganger med samme funksjon som sin første parameter dette ville ha vært en demonstrasjon av multi-threading.
  • Enhver funksjon som har følgende erklæring:
    UINT AnyFunction (åpne parametre);
    er en kandidat for en Worker tråd.