zoukankan      html  css  js  c++  java
  • 多线程代码段 自清理线程

    自清理线程

    #include "stdafx.h"
    
    #include<iostream>
    #include <memory>            // include auto_ptr
    #include <process.h>        // include _beginthreadex _endthreadex;
    using namespace std;
    
    
    class CQTZ_Thread_AutoClear
    {
        friend unsigned int __stdcall _THREAD_FUN_(LPVOID lpvData);
    public:    
        //创建线程接口函数
        static bool Thread_Create(void)
        {
            CQTZ_Thread_AutoClear *_thread_obj=new CQTZ_Thread_AutoClear();
            return _thread_obj->_Thread_Active();
        }
    
        //
        virtual ~CQTZ_Thread_AutoClear(void)
        {
            cout<<"~CQTZ_Thread_AutoClear(void)"<<endl;
        }
    
        //线程任务接口函数
        virtual void Thread_Task(void)
        {
            int _start_data=12;
            for (int i=0; i<_start_data; i++)
            {
                ::Sleep(500);
                cout<<"thread id="<<::GetCurrentThreadId()<<" i="<<i<<endl;
            }
        }
    
    private:
        CQTZ_Thread_AutoClear(void)
        {
            cout<<"CQTZ_Thread_AutoClear(void)"<<endl;
        }
        
        //创建线程
        bool _Thread_Active(void)
        {        
            HANDLE _hthread = (HANDLE)_beginthreadex(NULL,0,_THREAD_FUN_,this,0,0);        
            if (_hthread)
            {
                ::CloseHandle(_hthread);
                return true;
            }
            else
            {
                return false;
            }        
        }
        
    };
    
    //线程函数
    unsigned int __stdcall _THREAD_FUN_(LPVOID lpvData)
    {
        {    // CQTZ_Thread_AutoClear 对象要在 _endthreadex函数执行前清理 否则会内存泄漏
            CQTZ_Thread_AutoClear *pthread = (CQTZ_Thread_AutoClear *)lpvData;
            auto_ptr<CQTZ_Thread_AutoClear> _thread_ptr(pthread);
            pthread->Thread_Task();
        }
        
        _endthreadex(0);
        return 0;
    }
    
    
    //主线程函数
    int _tmain(int argc, _TCHAR* argv[])
    {
        CQTZ_Thread_AutoClear::Thread_Create();        
        system("pause");
        return 0;
    }
  • 相关阅读:
    Quora的技术探索
    基于移动互联网的电子商务个性化推荐的一些思考
    想个法子找出性能差的SQL
    结束——2012年微软精英挑战赛
    sql 查询时间执行长的sql语句
    NET好书盘点
    最后两个编程题
    网络七层协议
    使用WCF创建Restful服务
    一步一步学Entity FrameWork 4
  • 原文地址:https://www.cnblogs.com/qiantz/p/3186609.html
Copyright © 2011-2022 走看看