Упрощение цикла с проверкой условия. C++
Начинаю вспоминать плюсы, есть ли у вас идеи как это упросить функцию читателя в пару строк? Просьба минусовать аргументированно. UPD выложен полный код с учетом комментариев.
#include <iostream>
#include <thread>
#include <vector>
#include <locale.h>
//буфер в который записывается сообщение
std::vector<char> message;
//индикатор готовности сообщения
short ready = 0;
//функция писателя
void writerAction(void) {
std::string temp = "textMessage";
for (int i = 0; i < temp.length(); i++) {
message.push_back(temp[i]);
}
ready = 1;
}
//функция читателя (если сообщение написано, оно выводится, иначе повтор проверки условия)
void readerAction(void) {
while (true) {
if (!ready) {
continue;
}
else {
std::cout << "Сообщение: ";
for (int i = 0; i < message.size(); i++) {
std::cout << message[i];
}
std::cout << std::endl;
break;
}
}
}
int main()
{
setlocale(LC_ALL, "Russian");
//поток писателя (writer.get_id() покажет ид)
std::thread writer(writerAction);
//поток читателя
std::thread reader(readerAction);
//завершение работы потоков (обязательно)
writer.join();
reader.join();
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Вообще-то
void readerAction(void)
{
while (!ready);
std::cout << "Сообщение: ";
for (int i = 0; i < message.size(); i++) std::cout << message[i];
std::cout << std::endl;
}
Но у вас ready точно объявлена как volatile?
В любом случае такой "процессоропожирающий" подход представляется не лучшим решением...