当前位置: 首页 > 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://www.yutouwan.com/news/263737/

相关文章:

  • 户型图在哪个网站找哪里有手机网站制作公司
  • 微股东微网站制作平台公众号编辑器下载
  • 网站记录ip 修改有哪些网站建设工作
  • 企业网站建设目的选择题免费ppt素材库大全app
  • 怎么做百度网站验证有没有比WORDPRESS好的软件
  • 类似于美团的网站怎么做的个体户做网站是怎么备案
  • 建设工程用地批准手续在哪个网站江苏今天刚刚的最新新闻
  • 福田企业网站推广哪个好扁平化设计网站 国内
  • 队标logo设计简单网站如何做优化排名
  • 150网站建设网站开发经常遇到的问题
  • 举报网站建设自查报告常见的网络推广方式有哪些
  • 免费门户网站微信的企业网站模板
  • 哈尔滨网站备案手续山东网站建设哪家便宜
  • 深圳定制建站网站建设esu wordpress
  • 宁波网站建设选择荣胜网络做的新网站能用多久
  • 怎么在百度创建网站一起做网店广州站
  • 做外贸网站信息西安网站建设是什么
  • 舟山网站建设代理开封网站建设培训班
  • 区块链 做网站马鞍山网站建设兼职
  • 汽车网站模块奔驰宝马游戏网站建设
  • wordpress建站被黑做网站销售有前景吗
  • 自己做的网站怎么管理用户佛山网站建设专业公司
  • 如何免费建网站免费ppt模板制作软件
  • 奇点网站建设网页qq登录网站
  • 网站建设功能介绍无锡企业网站
  • 岱山建设局网站如何撰写网站建设方案书
  • windows10优化工具南阳企业网站排名优化
  • 网站免费正能量直接进入检察官小程序编程
  • 网站外链查询济南网站app开发
  • 狮山网站开发无法打开建行网站