hi,


I used the following piece of code after following your suggestions. Iam new to boost and even multi-threading
When I ran this piece of code on my machine I found that for every run 4 threads are only used out of the pool. As I have 4 cores in my machine. Is it so??
#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread.hpp>

boost::atomic_int thrd_gen(0);

void dowork(int i) {
    thread_local int tid = ++thrd_gen;
    std::cout << "hello";
    std::cout << " thread ID :" << tid << "\n";
}

int main() {
    boost::asio::io_service ioservice;
    boost::thread_group group;

    boost::optional<boost::asio::io_service::work> work(boost::asio::io_service::work{ioservice});

    for(size_t i=0; i<boost::thread::hardware_concurrency(); i++) {
        group.create_thread(
            boost::bind(&boost::asio::io_service::run, &ioservice)
        );
    }

    std::cout << "in main thread size=" << group.size() <<std::endl;

    for(int i = 0; i <= 5; ++i) {
        for(int i=0; i<5; i++) {
            ioservice.post(boost::bind(dowork,10));
        }

        boost::this_thread::sleep_for(boost::chrono::milliseconds(600));
        std::cout << "waking up\n";
    }

    work.reset(); // allow threads to exit
    group.join_all(); // await proper thread shutdown
 
}

Also, my application is time-sensitive and I need to do some time measures. If I use sleep my results will be incorrect. So, please suggest an alternative way to get notified when all the threads finish without using sleep.

Thanks for your time on this