Skip to content
Related Articles

Related Articles

Improve Article

C++ File Writer-Reader application using Windows Threads

  • Last Updated : 01 May, 2020

In this article, we will create a simple Writer-Reader application, which uses two threads, one for Writing into the file and another for Reading from the file. Here we will discuss the approach using Win32 Threads in C/C++. A windows thread can be created using the CreateThread() method.

Approach:

  1. Create a Thread function for Reading data from the file




    // 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. Create a Thread function for Writing data into the file




    // 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. Create two threads using CreateThread function for both Writing and Reading data from the file
  4. Use WaitForSingleObject to wait until the specified object is in the signaled state or time out interval elapses.

Below is the implementation of the above program:




// 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;
}

Run the application in the cmd using the command:

g++ MultiThreading.cpp -lws2_32

Output:

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for the language and STL. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.



My Personal Notes arrow_drop_up
Recommended Articles
Page :