zoukankan      html  css  js  c++  java
  • 一个简单的threadpool

    Interface如下

    代码
    struct Job
    {
        
    void (*func)(void*);
        
    void *para;
    };

    class ThreadPool:noncopyable
    {
    public:
        
    static SetNumThreads(size_t NThread);    //MUST called before Instance()

        
    static ThreadPool& Instance();
        
        boost::shared_ptr
    <Event> SubmitJob(const Job& job);
        
        
    void WaitAllJobDone();

        
    //make as public JUST FOR pass VC6 compile!
        ThreadPool();
        
    ~ThreadPool();
        
    private:
        
    static void JobThread( void * pThis );
        
        
    bool m_exit;
        std::vector
    <unsigned long> m_threads;
        
        
    struct JobData
        {
            Job job;
            boost::shared_ptr
    <Event> event;
        };

        std::list
    <JobData> m_JobQueue;
        Mutex m_jobMutex;
        
    static size_t m_numThread;

    };

    附加一个简单的使用例子

    代码
    void f(void* p)
    {
        
    int* pI = (int*)p;
        printf(
    "Thread %d, I: %d\n", GetCurrentThreadId(), *pI);
        Sleep(
    1000);
    }

    int main(int argc, char* argv[])
    {
        printf(
    "Hello World!\n");
        ThreadPool
    & pool = ThreadPool::Instance();
        size_t i;

        std::vector
    <int> paras(10);
        
    for(i=0; i<10; i++)
            paras[i] 
    = i;

        Job job;
        job.func 
    = f;

        
    //std::vector<boost::shared_ptr<Event> > jobs;

        
    for(i=0; i<10; i++)
        {
            job.para 
    = &paras[i];
            pool.SubmitJob(job);
            
    //jobs.push_back();
        }

        
    /*for(i=0; i<10; i++)
        {
            jobs[i]->Wait(INFINITE);
        }
    */
        pool.WaitAllJobDone();

    全部源代码在这里 (vs6)

    https://files.cnblogs.com/cutepig/testJobThread.rar
  • 相关阅读:
    兼容多浏览器的网页复制插件(ZeroClipboard)
    兼容主流浏览器的css渐变色
    如何让字体随窗口缩放自动调整大小
    使用javascript实现html页面直接下载网盘文件
    360随身wifi隐藏ssid方法
    javascript特效——烟花燃放的效果[xyytit]
    JavaScript数组定义
    常用特殊符号的HTML代码(HTML字符实体)
    9.JAVA之GUI编程列出指定目录内容
    8.JAVA之GUI编程键盘码查询器
  • 原文地址:https://www.cnblogs.com/cutepig/p/1759229.html
Copyright © 2011-2022 走看看