プログラミングをしていて、使えるパターンにWorkerThreadパターンがあります。
処理をRequestとしてChannelに登録して順次処理してもらいます。
C++で上記の処理を実現したい時に、Pocoフレームワークを使うと簡単に実現する事ができます。
| クラス | 説明 |
|---------|----------------------------------------|
| Channel | 処理を受け付けるクラス |
| Request | 処理を表す、サブクラスで処理を定義する |
| Worker | 実際に処理を行うクラス |
使い方は以下の感じです。ソースコードは[Github](https://github.com/k28/poco_channel.git)をご覧ください。
```cpp
`gutter:true;
#include "request.h"
#include "channel.h"
#include <iostream>
#include <Poco/Thread.h>
using namespace htn;
class PrintRequest : public Request {
public:
PrintRequest(int index) :index_(index) {
};
~PrintRequest() {};
virtual void Execute() {
int val = Poco::Thread::currentTid();
{
std::cout << "Execute [" << std::to_string(val) << "]" << std::to_string(index_) << std::endl;
}
Poco::Thread::sleep(100);
};
int index_;
};
int main(int argc, char const* argv[])
{
std::cout << "hello world" << std::endl;
{
Channel channel(3);
for (int i = 0; i < 100; i++) {
channel.PutRequest(new PrintRequest(i));
}
Poco::Thread::sleep(10 * 1000);
}
return 0;
}
```
0 件のコメント :
コメントを投稿