#include <iostream>
#include <thread>
#include <chrono>
{{#each this}}
{{#each this}}
#include "{{this.RunnableName}}Runnable.hpp"
{{/each}}
{{/each}}


using namespace std;

{{#each this}}
void {{@key.ActivityName}}Task()
{
    {{#each this}}
    {{this.NameSpace}}::{{this.RunnableType}}Runnable *p_{{this.RunnableName}}Runnable = new {{this.NameSpace}}::{{this.RunnableType}}Runnable();
    {{/each}}
    
    {{#each this}}
    p_{{this.RunnableName}}Runnable->init();
    {{/each}}
    
    while(true)
    {
    {{#each this}}
        //p_{{this.RunnableName}}Runnable->run_user();
        p_{{this.RunnableName}}Runnable->run();
        
    {{/each}}
        std::this_thread::sleep_for({{@key.TimeoutMs}}ms);
    }
}

{{/each}}
void scom_task()
{
{{#each this}}
    thread t_{{@key.ActivityName}}({{@key.ActivityName}}Task);
    std::this_thread::sleep_for(100ms);
{{/each}}
{{#each this}}
 
    if (t_{{@key.ActivityName}}.joinable())
    {
        t_{{@key.ActivityName}}.join();
    }
    cout << "t_{{@key.ActivityName}} exit. ";
{{/each}}
}