当前位置:  -> 首页 -> C++ SDK开发方式下线程使用

上一篇 | 下一篇
C++ SDK开发方式下线程使用
作者:洛羽叶  点击率:1105  发布时间:2012-11-26
采用CreateThread、SuspendThread、ResumeThread、TerminateThread方式,虽然由于C函数涉及安全及资源泄露问题,但不要太在意,除非高强度计算的任务,一般不会出现,并且如果程序运行期间频繁启动线程次数10000次以下根本无需考虑资源泄露,采用SDK线程的方式代码逻辑较为合理。
    
比较推荐的方式_beginthreadex、SuspendThread、ResumeThread、TerminateThread方式,一般情况下程序逻辑控制合理用不到TerminateThread。

以下是线程使用的注意事项,线程回调函数要使用类成员函数的问题,将this指针当做参数传递。

执行的类静态成员函数

static unsigned __stdcall BogusThreadFunction(void* pParam);
MyThread* This=( MyThread *)pParam;
exitCode=This->ThreadFunction();

实际的函数执行体,此时可以访问成员变量,使用时重载

virtual UINT ThreadFunction();

创建线程

Handle =(HANDLE)::_beginthreadex(
NULL0,BogusThreadFunction,(void*)this,CREATE_SUSPENDED,&ThreadId);   
习惯于采用挂起方式,这样创建、启动、停止、释放逻辑清晰。

启动线程

::ResumeThread(Handle);
利用变量控制等待线程真正启动Sleep+PeekMessage组合。

停止线程

Status= Stopped;
创建一个成员变量Status用以控制线程终止,所有线程的执行部分应当判断Status

强行终止

    TerminateThread(Handle,
0);
    ::CloseHandle(Handle);

析构函数释放资源

    DWORD code=
0;
    
if(Handle!=NULL)
    {
        ::GetExitCodeThread(Handle,& code);
        
if(code ==STILL_ACTIVE)
            ::TerminateThread(Handle,
0);            
        ::CloseHandle(Handle);
        Handle=
NULL;
    }

 
标签: 线程 CreateThread _beginthreadex C++
引用地址:本站原创
   站点首页      技术人生      旅途足迹      我要留言      友情链接      关于站长   
[本站统计]
在线人数:23
今日访问:102
总访问量:1936595
Copyright 2006-2022 EasyWeb 1.6 订阅 All Rights Reserved
粤ICP备08028977号-1
www.luoriver.com
Created by WWH in 2006