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:
- 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;
}
- 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;
}
- Cree dos subprocesos utilizando la función CreateThread para escribir y leer datos del archivo
- 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
Publicación traducida automáticamente
Artículo escrito por gvishalsai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA