Использую TCPServer (POCO C++ Libraries), который создает поток на 1 клиента. Необходимо передавать клиенту(потоку), к примеру, данные о передвижении персонажей в игровом мире. Как это реализовать?
Для передачи между потоками в POCO существует класс NotificationQueue. Я добавил вывод информационных сообщений в пример отсюда и перевел комментарии:
#include <iostream>
#include <string>
#include "Poco/Notification.h"
#include "Poco/NotificationQueue.h"
#include "Poco/ThreadPool.h"
#include "Poco/Runnable.h"
#include "Poco/AutoPtr.h"
using Poco::Notification;
using Poco::NotificationQueue;
using Poco::ThreadPool;
using Poco::Runnable;
using Poco::AutoPtr;
class WorkNotification: public Notification
{
public:
WorkNotification(int data): _data(data) {}
int data() const
{
return _data;
}
private:
int _data;
};
class Worker: public Runnable
{
public:
Worker(NotificationQueue& queue,
const std::string& str): _queue(queue),name(str) {}
void run()
{
AutoPtr<Notification> pNf(_queue.waitDequeueNotification());
while (pNf)
{
WorkNotification* pWorkNf =
dynamic_cast<WorkNotification*>(pNf.get());
if (pWorkNf)
{
std::cout<<name<<" get data : "<<pWorkNf->data()<<"\n";
}
pNf =
_queue.waitDequeueNotification();
}
}
private:
NotificationQueue& _queue;
std::string name;
};
int main()
{
NotificationQueue queue;
//создаем рабочие процессы
Worker worker1(queue,"first");
Worker worker2(queue,"second");
// запускаем
ThreadPool::defaultPool().start(worker1);
ThreadPool::defaultPool().start(worker2);
// добавляем уведомления
for (int i = 0; i < 10; ++i)
queue.enqueueNotification(new WorkNotification(i));
while (!queue.empty()) // ждем пока работы выполняются
Poco::Thread::sleep(100);
queue.wakeUpAll(); // говорим рабочим о выполнении
ThreadPool::defaultPool().joinAll();
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пытаюсь сделать аналог SetLength (паскаль) в C++ Просто уже нет сил без такой же удобной вещи, но мой код почему-то не работает Вот код:
Создал TEdit динамически, не могу в него ничего писать в программе, даже выделить не могу
Есть код размещений с повторениями,не могу понять реализацию алгоритма без повторений,везде нахожу что нужна функция аля"NextSet",которая бы как...