当前位置: 首页 > news >正文

柳城网站建设免费网址域名

柳城网站建设,免费网址域名,导师微信赚钱只投资10元,大方县住房城乡建设局网站目录 一、创建线程的几种方法 1、使用POSIX线程库#xff08;pthread)#xff08;C#xff09; 2、 使用Windows线程库#xff08;Win32 API#xff09;#xff08;C#xff09; 3、使用C11标准库 二、线程的应用#xff08;常用实例#xff0c;附上完整代码pthread)C 2、 使用Windows线程库Win32 APIC 3、使用C11标准库 二、线程的应用常用实例附上完整代码 1、CreateThread创建线程的实例 一、创建线程的几种方法 在C/C中有多种方法可以创建线程以下列出了其中几种常用的方法 1、使用POSIX线程库pthread)C POSIX线程库是一套用于多线程编程的标准库在大部分类UNIX系统上都可以使用。可以使用pthread_create()函数来创建线程。 // C #include pthread.hvoid *threadFunc(void *arg) {// 线程的代码逻辑return NULL; }int main() {pthread_t tid;pthread_create(tid, NULL, threadFunc, NULL);// 主线程的代码逻辑pthread_join(tid, NULL); // 等待子线程执行完毕return 0; } 2、 使用Windows线程库Win32 APIC 在Windows操作系统上可以使用Win32 API来创建线程。可以使用CreateThread()函数来创建线程。 1CreateThread()的原型为 HANDLE CreateThread(   LPSECURITY_ATTRIBUTES   lpThreadAttributes,   SIZE_T                  dwStackSize,   LPTHREAD_START_ROUTINE  lpStartAddress,   LPVOID                  lpParameter,   DWORD                   dwCreationFlags,   LPDWORD                 lpThreadId ); 参数说明 lpThreadAttributes线程的安全属性默认为NULL。dwStackSize线程堆栈的大小默认为0表示使用默认的堆栈大小。lpStartAddress线程的入口函数地址可以是一个函数指针或者线程函数的名字。lpParameter传递给线程函数的参数。dwCreationFlags线程的创建标志可以设置一些额外的选项如CREATE_SUSPENDED创建后暂停等。lpThreadId用于接收线程ID的指针。 CreateThread函数创建一个新的线程并返回一个指向线程的句柄。通过这个句柄可以对线程进行一些操作如等待线程结束、挂起或恢复线程等。 2下面是一个简单的示例演示如何使用CreateThread创建一个新的线程 // c #include windows.hDWORD WINAPI threadFunc(LPVOID lpParam) {// 线程的代码逻辑return 0; }int main() {HANDLE hThread CreateThread(NULL, 0, threadFunc, NULL, 0, NULL);// 主线程的代码逻辑WaitForSingleObject(hThread, INFINITE); // 等待子线程执行完毕CloseHandle(hThread);return 0; } 3、使用C11标准库 在C11标准中引入了std::thread类可以方便地创建和管理线程。 // c #include threadvoid threadFunc() {// 线程的代码逻辑 }int main() {std::thread t(threadFunc); // 创建线程// 主线程的代码逻辑t.join(); // 等待子线程执行完毕return 0; } 4、AfxBeginThread MFC AfxBeginThread 是一个 MFCMicrosoft Foundation Class函数用于创建一个新的线程。它的含义是在应用程序中启动一个新的线程以便在后台执行一些任务而不会阻塞主线程的运行。 AfxBeginThread 函数的原型如下 CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority THREAD_PRIORITY_NORMAL, UINT nStackSize 0, DWORD dwCreateFlags 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs NULL ); 参数说明 pfnThreadProc指向线程函数的指针该线程函数将在新线程中执行。pParam传递给线程函数的参数。nPriority新线程的优先级默认为 THREAD_PRIORITY_NORMAL。nStackSize新线程的堆栈大小默认为 0表示使用默认堆栈大小。dwCreateFlags创建线程的标志默认为 0。lpSecurityAttrs线程安全属性默认为 NULL。 AfxBeginThread 函数将返回一个 CWinThread 对象的指针可以使用该指针来管理和控制新线程的行为如等待线程结束、获取线程ID等。 总之AfxBeginThread 函数用于创建一个新的线程并在新线程中执行指定的函数以实现多线程编程。 实例 // 声明一个变量继承于CWinThread UINT ReceiveMsgThreadID; CThreadReceiveRespMsg *pThreadReceiveMsg;//启动线程 pThreadReceiveMsg (CThreadReceiveRespMsg *)::AfxBeginThread(RUNTIME_CLASS(CThreadReceiveRespMsg), THREAD_PRIORITY_NORMAL); if (pThreadReceiveMsg ! NULL) {log(_T(线程1启动成功 \n));ReceiveMsgThreadID pThreadReceiveMsg-m_nThreadID; } else {log(_T(线程1启动失败 \n)); }以上是几种常用的创建线程的方法选择哪种方法取决于你的需求和运行环境。 二、线程的应用常用实例附上完整代码 1、CreateThread创建线程的实例 // 头文件 #pragma once #include singleton.h #include windows.hclass CThreadBase { public:CThreadBase(void);virtual ~CThreadBase(void);public:// 开启线程void vStart();// 结束线程virtual void vStop();// 线程是否可运行virtual bool isCanRun();// 子类重写此函数用于接收线程逻辑virtual int circle();// 入锁、解锁临界区不同的编译环境修改成其他的同步条件即可void _lock();void _unLock();protected:DWORD m_dThreadId; // 线程ID bool m_bCanRun; // 是否可以运行int m_nThreadHandle; // 线程句柄#ifdef WINVERCRITICAL_SECTION m_criSection; // 临界区定义一个需要数据同步的自取即可 #endif };// 源文件 #include ThreadBase.h //#include afxwin.h// 线程函数 DWORD WINAPI threadProc(LPVOID pArgs) {if (0 pArgs)return 0;CThreadBase* pThreadBase (CThreadBase*)pArgs;pThreadBase-circle();return 0; }CThreadBase::CThreadBase(void) {m_bCanRun false;m_dThreadId 0;m_nThreadHandle NULL;#ifdef WINVERInitializeCriticalSection(m_criSection); #endif }CThreadBase::~CThreadBase(void) { }void CThreadBase::vStart() {m_nThreadHandle (int)CreateThread(NULL, 0, threadProc, this, 0, m_dThreadId);m_bCanRun true; }void CThreadBase::vStop() {m_bCanRun false; }bool CThreadBase::isCanRun() {return m_bCanRun; }int CThreadBase::circle() {return TRUE; }void CThreadBase::_lock() { #ifdef WINVEREnterCriticalSection(m_criSection); #endif }void CThreadBase::_unLock() { #ifdef WINVERLeaveCriticalSection(m_criSection); #endif } 使用时候 1直接继承这个类子类重写circle() 这个函数即可这个函数用于接收线程的逻辑 2想让线程执行的功能可以写在子类的circle()中
http://wiki.neutronadmin.com/news/263737/

相关文章:

  • 照片书那个网站做的好农村自建房室内装修设计效果图
  • 网站建设回访wordpress手机版怎么做
  • 做网站买那种服务器天河手机建网站
  • 网站开发的售后 维保dw网页制作成品代码加图片
  • 如何查询网站点击量关键词优化网站排名
  • 如何用源代码做网站网站建设报价包括哪些
  • 如何分析一个网站的用户网站风格抄袭
  • 怎样做网站首页图片变换怎么自学室内设计与装修
  • 网站开发php jspwordpress页面制作
  • 广州天河区网站建设公司制作图片二维码
  • 东莞营销型网站建站wordpress如何修改首页文件模板
  • 建设公司网站需要准备什么高端网站设计制作的
  • 自助建设视频网站单页网站模板安装
  • 泌阳专业网站建设建设手机网站例
  • 广东高端网站设计公司wordpress资源网模板
  • 专业的网站建设公司电话余姚什么网站做装修比较好
  • 西乡网站开发做图专业软件下载网站有哪些
  • 个人网站 免备案上海seo公司
  • 阳江企业网站国家开发银行生源地助学贷款网站
  • 网站建设湖南岚鸿建设旅游电子商务网站的建设
  • 专业摄影网站推荐做网站需要代码吗
  • 网站怎么做七牛云加速软件大全免费下载
  • 做网站接广告赚钱吗湖南企业网站建设制作
  • 如今流行的网站建设网站建设的完整流程包括
  • 利用已有网站 制作南京高端定制网站建设
  • 做体育设施工程公司的网站网络企业做网站
  • 校园内部网站建设方案青白江建设网站
  • 可信赖的常州网站建设网站标题是关键词吗
  • 做金融网站有哪些要求wordpress分类目录样式模板
  • 天津做网站报价怎样注册企业邮箱帐号