8#define CONTAINER_WEIGHT (1024 * 1024 * 10)
146 OutputDebugString (_T (
"ClockElement::Start() IN.\n"));
152 OutputDebugString (_T (
"ClockElement::Start() OUT.\n"));
158 OutputDebugString (_T (
"ClockElement::Stop() IN.\n"));
163 OutputDebugString (_T (
"ClockElement::Stop() OUT.\n"));
169 OutputDebugString (_T (
"ClockElement::Invoke() IN.\n"));
173 double dPastTick = 0;
183 if (dwReason == WAIT_OBJECT_0)
188 GetLocalTime (&localTime);
194 msg.
Format (_T (
"ClockTime %3u Past=%5u Diff=%7d %02d:%02d:%02d.%03d"),
195 byteData->
GetSeqNo (),
static_cast<UINT
>(dPastTick),
196 static_cast<INT
>(dPastTick - (
double)
_dwInterval * 1000),
197 localTime.wHour, localTime.wMinute, localTime.wSecond,
198 localTime.wMilliseconds);
199 OutputDebugString (msg.
Ctr ());
206 OutputDebugString (_T (
"ClockElement::Invoke() OUT.\n"));
308 OutputDebugString (_T (
"TerminateElement::Update()"));
317 message.
Format (_T (
"Product(%u) Seq(%02u) Start(%u) ProcessTick(%u)"),
321 OutputDebugString (message.
Ctr ());
333 TString msg = _T (
"DummyProduct::DummyProduct(");
336 OutputDebugString (msg.
Ctr ());
349 TString msg = _T (
"DummyProduct::Init(");
352 OutputDebugString (msg.
Ctr ());
361 TString msg = _T (
"DummyProduct::Start(");
364 OutputDebugString (msg.
Ctr ());
374 TString msg = _T (
"DummyProduct::Process(");
377 OutputDebugString (msg.
Ctr ());
399 TString msg = _T (
"DummyProduct::Stop(");
402 OutputDebugString (msg.
Ctr ());
409 TString msg = _T (
"DummyProduct::Exit(");
412 OutputDebugString (msg.
Ctr ());
419 TString msg = _T (
"DummyProduct::Update(");
422 OutputDebugString (msg.
Ctr ());
425 msgString.
Format (_T (
"Response From(%d) To(%d) Command(%d)\n"),
427 OutputDebugString (msgString.
Ctr ());
446 if (target.
Substring (0, 5) == _T (
"Dummy"))
452 throw _T (
"Invalid argument "), target.
Ctr ();
462 if (target == _T (
"Clock"))
466 else if (target == _T (
"Sync"))
470 else if (target == _T (
"Queue"))
474 else if (target == _T (
"Terminate"))
480 throw _T (
"Invalid argument "), target.
Ctr ();
504 product.second->Init (config);
508 clockElement->
Init ();
519 ret = product.second->Start ();
535 clockElement->
Stop ();
539 product.second->Stop ();
549 product.second->Exit ();
558 msgString.
Format (_T (
"Response From(%d) To(%d) Command(%d)\n"),
560 OutputDebugString (msgString.
Ctr ());
565 auto pair = std::pair<TString, IProduct*> (name, product);
576 auto pair = std::pair<TString, IElement*> (name, element);
592 TString prefixNames[] = { _T (
"TEST1_"), _T (
"TEST2_"), _T (
"TEST3_"), _T (
"TEST4_"), _T (
"TEST5_") };
593 TString objectNames[] = { _T (
"Dummy1"), _T (
"Dummy2") };
596 IElement* previousElement = creator->CreateElement (_T (
"Clock"), _T (
"ClockGenerator"));
597 manager->AddElement (_T (
"Clock"), previousElement);
602 for (
TString prefixName : prefixNames)
604 for (
TString objectName : objectNames)
606 fullName = prefixName + objectName;
608 IProduct* product = creator->CreateProduct (
id++, objectName, fullName);
609 manager->AddProduct (fullName, product);
610 manager->
Add (product);
611 product->
Add (manager);
613 IElement* element = creator->CreateElement (_T (
"Queue"), fullName);
614 manager->AddElement (fullName, element);
619 previousElement->
Add (element);
620 previousElement = element;
625 IElement* terminateElement = creator->CreateElement (_T (
"Terminate"), _T (
"Terminater"));
626 previousElement->
Add (terminateElement);
627 manager->AddElement (_T (
"Terminate"), terminateElement);
#define SECTION_PIPELINE_FACTORY
struct _container Container
struct _container * pContainer
#define KEYWORD_DUMMY_PROCESS_TIME
VOID APIENTRY Enter()
排他処理開始
VOID APIENTRY Leave()
排他処理終了
イベントに関するWindowsAPIを集約したクラス
BOOL APIENTRY Create(LPCTSTR lpctszName, BOOL bManualReset, BOOL bInitialState)
イベントを作成します。
BOOL APIENTRY Open(LPCTSTR lpctszName)
イベントをオープンします。
BOOL APIENTRY Set() const
イベントをセット(シグナル状態に)します。
virtual void Start(DWORD dwInterval)
WatchDogTimer * _watchdog
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
int GetDummyProcessTime()
virtual bool Load(LPCTSTR lpctszConfigPath)
virtual IProduct * CreateProduct(int id, TString target, TString fullName)
virtual IElement * CreateElement(TString target, TString fullName)
virtual IData * Process(IData *data)
virtual bool Init(IConfig *config)
virtual void Update(IMessage *message)
SYSTEMTIME & GetCreateTime()
virtual void SetProduct(IProduct *product)
virtual TString & GetName()
void SetParam(int to, int from, int command)
virtual IData * Process(IData *data)=0
virtual IProductManager * Buildup()
virtual ~ProductManager()
std::map< TString, IElement * > _elements
virtual void Update(IMessage *message)
virtual void AddProduct(TString name, IProduct *product)
virtual IElement * GetElement(TString name)
virtual bool Init(IConfig *config)
virtual IProduct * GetProduct(TString name)
std::map< TString, IProduct * > _products
virtual void AddElement(TString name, IElement *element)
CriticalSection _exclusive
virtual void Update(IData *data)
std::queue< IData * > _queue
QueueElement(TString elementName)
virtual DWORD Invoke(LPVOID lpvParam)
コールバック関数プレースホルダ
virtual void Update(IData *data)
virtual void Update(IData *data)
virtual ~TerminateElement()
BOOL APIENTRY Init(LogLevel logLevel, LPCTSTR fileName, SHORT sRotation, DWORD dwFileSize)
初期化
VOID APIENTRY Info(LPCTSTR message, DWORD dwThreadID=GetCurrentThreadId())
情報ログの出力
文字列に関するWindowsAPIを集約したクラス
TString &APIENTRY Format(LPCTSTR format,...)
フォーマットに従ってパラメータを文字列化します。
LPCTSTR APIENTRY Ctr() const
内部で確保している文字列ポインタを取得します。
TString APIENTRY Substring(int startPos, int length=0)
文字列を切り出します。
スレッドに関するWindowsAPIを集約したクラス
BOOL APIENTRY Create(PTHREAD_START_ROUTINE function=NULL, LPVOID lpvParam=NULL, DWORD dwCreationFlag=0)
スレッドを作成します。
タイマーに関するWindowsAPIを集約したクラス
BOOL APIENTRY InitTimer(LPCTSTR lpctszName=NULL)
初期化
DWORD APIENTRY WaitTimer() const
タイムアップ待機
BOOL APIENTRY StopTimer() const
タイマー停止
BOOL APIENTRY StartTimer(DWORD dwTime) const
タイマー開始
virtual void Add(IObserver< Data > *observer)
IObserver<Data>*を引数とする関数 Add()
virtual void Notify(IData * data)
Dataを引数とする関数 Notify()
DWORD ProcessStartTick[MAX_PRODUCT]
BYTE byDummy[CONTAINER_WEIGHT]
double ProcessTick[MAX_PRODUCT]