zl程序教程

您现在的位置是:首页 >  后端

当前栏目

一个Windows C++的线程类实现

C++Windows线程 实现 一个
2023-09-27 14:28:16 时间
    CThread(Runnable * pRunnable);       CThread(const char * ThreadName, Runnable * pRunnable = NULL);       CThread(std::string ThreadName, Runnable * pRunnable = NULL);       ~CThread(void);       /**        开始运行线程        @arg bSuspend 开始运行时是否挂起      **/       bool Start(bool bSuspend = false);       /**        运行的线程函数,可以使用派生类重写此函数      **/       virtual void Run();       /**        当前执行此函数线程等待线程结束        @arg timeout 等待超时时间,如果为负数,等待无限时长      **/       void Join(int timeout = -1);       /**        恢复挂起的线程      **/       void Resume();       /**        挂起线程      **/       void Suspend();       /**        终止线程的执行      **/       bool Terminate(unsigned long ExitCode);       unsigned int GetThreadID();       std::string GetThreadName();       void SetThreadName(std::string ThreadName);       void SetThreadName(const char * ThreadName);   private:       static unsigned int WINAPI StaticThreadFunc(void * arg);   private:       HANDLE m_handle;       Runnable * const m_pRunnable;       unsigned int m_ThreadID;       std::string m_ThreadName;       volatile bool m_bRun;   #endif  
CThread::CThread(const char * ThreadName, Runnable * pRunnable) :    m_ThreadName(ThreadName),   m_pRunnable(pRunnable),   m_bRun(false)   CThread::CThread(std::string ThreadName, Runnable * pRunnable) :    m_ThreadName(ThreadName),   m_pRunnable(pRunnable),   m_bRun(false)   bool CThread::Start(bool bSuspend)       if(m_bRun)       {           return true;       }       if(bSuspend)       {           m_handle = (HANDLE)_beginthreadex(NULL, 0, StaticThreadFunc, this, CREATE_SUSPENDED,  m_ThreadID);       }       else       {           m_handle = (HANDLE)_beginthreadex(NULL, 0, StaticThreadFunc, this, 0,  m_ThreadID);       }       m_bRun = (NULL != m_handle);       return m_bRun;   void CThread::Run()       if(!m_bRun)       {           return;       }       if(NULL != m_pRunnable)       {           m_pRunnable- Run();       }       m_bRun = false;   void CThread::Join(int timeout)       if(NULL == m_handle || !m_bRun)       {           return;       }       if(timeout  = 0)       {           timeout = INFINITE;       }       ::WaitForSingleObject(m_handle, timeout);   void CThread::Resume()       if(NULL == m_handle || !m_bRun)       {           return;       }       ::ResumeThread(m_handle);   void CThread::Suspend()       if(NULL == m_handle || !m_bRun)       {           return;       }       ::SuspendThread(m_handle);   bool CThread::Terminate(unsigned long ExitCode)       if(NULL == m_handle || !m_bRun)       {           return true;       }       if(::TerminateThread(m_handle, ExitCode))       {           ::CloseHandle(m_handle);           return true;       }       return false;   unsigned int CThread::GetThreadID()       return m_ThreadID;   std::string CThread::GetThreadName()       return m_ThreadName;   void CThread::SetThreadName(std::string ThreadName)       m_ThreadName = ThreadName;   void CThread::SetThreadName(const char * ThreadName)       if(NULL == ThreadName)       {           m_ThreadName = "";       }       else       {           m_ThreadName = ThreadName;       }   unsigned int CThread::StaticThreadFunc(void * arg)       CThread * pThread = (CThread *)arg;       pThread- Run();       return 0;  

用法:

#include "Thread.h"
#include "ThreadPoolExecutor.h"

class R : public Runnable
{
public:
    ~R()
    {
        printf("~R/n");
    }
    void Run()
    {
        printf("Hello World/n");
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    R r;
    CThread * t = NULL;
    t = new CThread(
    t- Start();
    t- Join();

    getchar();

}

 

from:http://blog.csdn.net/huyiyang2010/article/details/5801597


【我的前端】CSS在Windows下实现Mac浏览器滚动条 众所周知,Windows 和 macOS 浏览器的滚动条在默认情况下是不一致的,最为显著的是 macOS 的滚动条是不占据屏幕尺寸的,macOS 的滚动条如下:
C#实现操作Windows窗口句柄:常用窗口句柄相关API、Winform中句柄属性和Process的MainWindowHandle问题【窗口句柄总结之三】 本篇主要介绍一些与窗口句柄相关的一些API,比如设置窗口状态、当前激活的窗口、窗口客户区的大小、鼠标位置、禁用控件等,以及介绍Winform中的句柄属性,便于直接获取控件或窗体句柄,以及不推荐...