Подскажите литературу по C++ 11 и Boost - Tera Online
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Подскажите литературу по C++ 11 и Boost

Регистрация
4 Апр 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
Здравствуйте! Какая есть внятная литература по реальному применению C++11, конкретно интересует многопоточность и умные указатели и boost::asio. Хочется видеть конкретные примеры применения, потому как по оф. докам да на англицком очень тяжко.
Плюс оцените корректность кода. Это некий абстрактный таймер, который запускает метод другого класса через определенные интервалы времени. Но, если не ошибаюсь, на gcc под linux и на TDM-GCC под виндой все ок, но на mingw флаг остановки таймера по значению не изменялся, только при передаче его в поток через указатель. Как правильно? Спасибо!

#include <iostream>
#include <thread>
#include <functional>
#include <memory>
#include <stdint.h>

using namespace std;

//Таймер
class Timer
{
//флаг останова
bool m_flag;
//интервал в миллисекундах
uint32_t m_time;
//метод другого класса
std::function<void(void*)> m_func;
//аргумент, передаваемый в функцию
void* arg;
public:
Timer():m_time(0)
{
m_flag=false;
arg=nullptr;
};
void connect(std::function<void(void*)> f, void* _arg)
{
m_func=f;
arg=_arg;
}
void setTime(uint32_t _time)
{
m_time=_time;
}
//запуск потока
void run()
{
cout << "run() method call..." << endl;
m_flag=true;
std::thread t(*this,arg);
t.detach();
}
//остановка потока
void stop()
{
cout << "stop() method call..." << endl;
m_flag=false;
}
void operator()(void* arg)
{
while(m_flag)
{
m_func(arg);
std::this_thread::sleep_for(std::chrono::milliseconds(m_time));
}
}
};

//Некий объект, которому нужен таймер
class Object
{
//поле объекта, изменяемое в новом потоке
volatile uint32_t m_counter;
public:
Object():m_counter(0){};

//Выполняется в таймере
void operator()(void* arg)
{
int a=*(int*)arg;
cout << "arg = " << a << "; field = " << *(&m_counter) << endl;
Inc();
}
//Метод объекта, вызываемый в новом потоке
void Inc()
{
++m_counter;
}
};

int main()
{
int a=5;
Timer tm;
Object obj;
tm.setTime(100);
tm.connect(obj, &a);
tm.run();
cin.get();
tm.stop();

return 0;
}
 
Регистрация
9 Ноя 2012
Сообщения
72
Репутация
0
Спасибо
0
Монет
0
Код лень смотреть после stdint.h. На этом "энтузиазм" угас. Учить англ. Почти без вариантов. Даже на аве у Вас написано по англ. Техн. английский, если знать более-менее предмет - не такой сложный. Вот реально хотите, чтобы там был исковерканный перевод на русский? Ну или тут недавно был разговор о путанице в русском между потоками ввода-вывода (stream) и потоками (thread).
 
Сверху Снизу