Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <cmath>
- #include <thread>
- #include <fstream>
- #include <mutex>
- #include <cstdlib>
- #include <ctime>
- std::mutex g_lock;
- using namespace std;
- struct Message {
- vector<double> values;
- int address = -99;
- };
- class MailBox {
- vector<Message>* messages = new vector<Message>();
- public:
- void messageSend(string msg){
- cout << msg;
- }
- void sendMessage(Message msg) {
- this_thread::sleep_for(100ms); // DELAY
- messages->push_back(msg);
- }
- Message receiveMessage(int address) {
- Message msg;
- int index = -99;
- if (messages->empty()) {
- cout << "message box is empty !\n";
- return Message();
- }
- for (int i = 0; i <= messages->size()-1; i++){
- if ((messages->at(i)).address == address) {
- msg = messages->at(i);
- index = i;
- }
- }
- if (index == -99) {
- return Message();
- }
- messages->erase(messages->begin() + index);
- return msg;
- }
- };
- MailBox* mailBox = new MailBox();
- void thread_1(){
- Message msg2 = Message();
- msg2.address = 2;
- vector<double> values2 = vector<double>();
- for (int i = 0; i < 10; ++i) {
- values2.push_back(cos(i));
- }
- msg2.values = values2;
- Message msg3 = Message();
- msg3.address = 3;
- vector<double> values3 = vector<double>();
- for (int i = 0; i < 20; i+=2) {
- values3.push_back(cos(i));
- }
- msg3.values = values3;
- mailBox->sendMessage(msg2);
- mailBox->sendMessage(msg3);
- mailBox->messageSend("Thread 1 sent messages \n");
- }
- void thread_2(){
- // переписывает информацию полученную из почтового ящика в текстовый файл.
- Message msg = mailBox->receiveMessage(2);
- if (msg.address == -99){
- cout << "message is empty \n"; // сообщение пустое
- return;
- }
- ofstream file;
- file.open("sin.txt", std::ios_base::app);
- for (auto value: msg.values) {
- file << value << "\n";
- }
- file.close();
- this_thread::sleep_for(50ms);
- mailBox->messageSend("Thread 2 received the message \n");
- }
- void thread_3(){
- Message msg = mailBox->receiveMessage(3);
- if (msg.address == -99){
- cout << "message is empty \n"; //
- return;
- }
- ofstream file;
- file.open("cos.txt", std::ios_base::app); /
- for (auto value: msg.values) {
- file << value << "\n";
- }
- file.close();
- this_thread::sleep_for(50ms);
- mailBox->messageSend("Thread 3 received the message \n");
- }
- int main() {
- new thread(thread_1);
- new thread(thread_2);
- new thread(thread_2);
- new thread(thread_2);
- new thread(thread_3);
- new thread(thread_2);
- new thread(thread_1);
- new thread(thread_2);
- new thread(thread_3);
- new thread(thread_2);
- new thread(thread_2);
- new thread(thread_2);
- new thread(thread_3);
- this_thread::sleep_for(9s); // waiting all
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment