Aplicación C++ File Writer-Reader usando subprocesos de Windows

En este artículo, crearemos una aplicación Writer-Reader simple , que utiliza dos subprocesos, uno para escribir en el archivo y otro para leer del archivo. Aquí discutiremos el enfoque usando Win32 Threads en C/C++ . Se puede crear un subproceso de Windows utilizando el método CreateThread() .

Acercarse:

  1. Cree una función de subproceso para leer datos del archivo

    // Thread function used to Read data from the file
    DWORD WINAPI ReadFromAFile(PVOID lpParam)
    {
        // Create a buffer
        char buffer[1024] = { 0 };
      
        // Creating ifstream object
        ifstream fileReader;
      
        // Opening the file in read mode
        fileReader.open("sample.txt");
      
        // Reading the data into the buffer
        cout << "Reading data from the file:";
      
        // Printing the data onto the console
        cout << buffer << endl;
      
        // Closing the opened file
        fileReader.close();
      
        return 1;
    }
  2. Cree una función de subproceso para escribir datos en el archivo

    // Thread function used to Write data into the file
    DWORD WINAPI WriteIntoAFile(PVOID lpParam)
    {
        // Create a buffer
        char buffer[1024] = { 0 };
      
        // Creating ofstream object
        ofstream fileWriter;
      
        // Opening the file in write mode
        fileWriter.open("sample.txt");
        cout << "Enter data to write into the file:";
      
        // Write the given input into the file
        fileWriter << buffer << endl;
      
        // Closing the opened file
        fileWriter.close();
      
        return 1;
    }
  3. Cree dos subprocesos utilizando la función CreateThread para escribir y leer datos del archivo
  4. Utilice WaitForSingleObject para esperar hasta que el objeto especificado esté en el estado señalado o hasta que transcurra el intervalo de tiempo de espera.

A continuación se muestra la implementación del programa anterior:

// C++ program for File Writer-Reader
// application using Windows Threads
  
#include <fstream>
#include <iostream>
#include <string.h>
#include <winsock2.h>
  
using namespace std;
  
// Thread function used to Read data from the file
DWORD WINAPI ReadFromAFile(PVOID lpParam)
{
    // Create a buffer
    char buffer[1024] = { 0 };
  
    // Creating ifstream object
    ifstream fileReader;
  
    // Opening the file in read mode
    fileReader.open("sample.txt");
  
    // Reading the data into the buffer
    cout << "Reading data from the file:" << endl;
  
    fileReader >> buffer;
    // Printing the data onto the console
    cout << buffer << endl;
  
    // Closing the opened file
    fileReader.close();
    return 1;
}
  
// Thread function used to Write data into the file
DWORD WINAPI WriteIntoAFile(PVOID lpParam)
{
    // Create a buffer
    char buffer[1024] = { 0 };
  
    // Creating ofstream object
    ofstream fileWriter;
  
    // Opening the file in write mode
    fileWriter.open("sample.txt");
    cout << "Enter data to write "
         << "into the file:"
         << endl;
    cin >> buffer;
  
    // Write the given input into the file
    fileWriter << buffer << endl;
  
    // Closing the opened file
    fileWriter.close();
  
    return 1;
}
  
// Driver code
int main()
{
    WSADATA WSAData;
    char buffer[1024];
    DWORD tid;
    ofstream fileWriter;
    ifstream fileReader;
    HANDLE t1, t2;
    int choice, flag = 1;
  
    while (flag) {
        cout << "================================"
             << "========================"
             << "==================" << endl;
        cout << "Select your option"
             << "\t1.Run the application "
             << "\t2.Exit" << endl;
        cin >> choice;
  
        switch (choice) {
  
        case 1:
            // Create the first thread for Writing
            t1 = CreateThread(NULL, 0,
                              WriteIntoAFile,
                              &fileWriter,
                              0, &tid);
            WaitForSingleObject(t1, INFINITE);
  
            // Create the second thread for Reading
            t2 = CreateThread(NULL, 0,
                              ReadFromAFile,
                              &fileReader,
                              0, &tid);
            WaitForSingleObject(t2, INFINITE);
            break;
  
        case 2:
            // Exiting the application
            cout << "Thank you for using"
                 << " the application"
                 << endl;
            flag = 0;
            break;
  
        default:
            // For any query other than 1 and 2
            cout << "Enter a valid query!!"
                 << endl;
        }
    }
    return 0;
}

Ejecute la aplicación en el cmd usando el comando :

g++ MultiThreading.cpp -lws2_32

Producción:

Publicación traducida automáticamente

Artículo escrito por gvishalsai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *