vc创建一个线程的方法

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
 

vc创建一个线程的方法:

vc创建一个线程的方法:
创建线程使用CreateThread
The CreateThread function creates a thread to execute within the address space of the calling process. 

 

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,  
 
DWORD dwStackSize,  指定初始提交栈的大小
 
LPTHREAD_START_ROUTINE lpStartAddress,
            //由线程执行,表示线程的起始地址,指定线程入口函数,
         //该入口函数的参数类型以及返回类型要与ThreadProc()函数声明的类型要保持一致
LPVOID lpParameter,  //指定一个单独的值传递给线程
DWORD dwCreationFlags, //指定控件线程创建的附加标记
LPDWORD lpThreadId );   //指向一个用来接收线程的标识符变量

参数1:指向SECURITY_ATTRIBUTES结构体的指针。

vc终止线程有三种方法:   
  1.线程可以在自身内部调用AfxEndThread()来终止自身的运行   
    
  2.可以在线程的外部调用BOOL   TerminateThread(   HANDLE   hThread,   DWORD   dwExitCode   )来强行终止一个线程的运行,   
  然后调用CloseHandle()函数释放线程所占用的堆栈   

  TerminateThread会有资源泄漏,不要万不得已,不要用这个函数
    DWORD code;
  if(GetExitCodeThread(MonitorComm,&code))  //MonitorComm 你创建的线程句柄
   if(code==STILL_ACTIVE)
   {
     TerminateThread(MonitorComm,0);
     CloseHandle(MonitorComm);
   }

   这样就安全了
  3.第三种方法是改变全局变量,使线程的执行函数返回,则该线程终止。   
    
  下面的例子来演示第三种方法   
  全局变量m_end来表示是否要结束线程   
    
  bool   m_end   =   false;   
  HWND   hWnd;   
    
  启动线程:   
  CWinThread*   pThread;   
    
  hWnd   =   GetSafeHwnd();   
  pThread   =   AfxBeginThread(ThreadProc,hWnd);   
  pThread->m_bAutoDelete   =   false;   
    
  线程的函数   
  UINT   ThreadProc(LPVOID   pParam);   
  UINT   ThreadProc(LPVOID   pParam)   
  {   
  while(!m_end)   
  {   
  AfxMessageBox("test;");   
  ::Sleep(2000);   
  }   
  return   0;   
  }   
    
  终止线程代码   
  m_end   =   true;   
  WaitForSingleObject(pThread->m_hThread,INFINITE);       //等待线程结束   
  delete   pThread;                 //删除线程 

C++开发基础之CreateThread详细用法 在上面的示例中,我们首先创建一个信号量 semaphore,然后使用 CreateThread 创建一个新的线程,并将线程函数设置为 MyThreadFunction。该函数返回之前的线程亲和性掩码,可以用来还原之前的设置。GetThreadAffinityMask和SetThreadAffinityMask是Windows API提供的两个函数,用于获取和设置线程的亲和性掩码。在调用CreateThread函数后,新线程将开始运行指定的线程函数,并且可以访问该函数中的参数。 阅读详情

相关推荐

VC如何创建一个新的线程

AfxBeginThread(DialThread,this);       //   开始一个线程,DialThread   为线程控制函数,在头文件定义如下: static   UINT   DialThread(LPVOID   pvThread); 随后在线程控制函数中如此这般,调用线程实现函数   _Dial() UINT   CRasThread::DialThread(LPVOID   pvThread) { //   Ï߳̿ØÖƺ¯Êý CRasThread   *pThread  

toy53的专栏 6143

CreateThread函数使用

 摘自"万一的博客"function MyFun(p: Pointer): Integer; stdcall;var i: Integer;begin for i := 0 to 500000 do begin Form1.Canvas.Lock; Form1.Canvas.TextOut(10, 10, IntToStr(i)); Form1.Canvas.Unl

amyliwei的专栏 5734

Windows C++多线程:安全终止线程的ExitThread与TerminateThread

调用此方法时,会将线程的退出码传递给系统,并且会处理线程的所有资源释放,即使线程正在执行某些代码,也会在执行完之后退出线程。在这个示例中,线程函数ThreadFunc中使用了ExitThread终止线程并返回退出码0,主线程调用WaitForSingleObject等待线程执行完毕,之后关闭线程句柄并输出线程终止信息。其中,hThread是要终止的线程句柄,dwExitCode是线程的退出码,可以传递任何值,但是建议使用0表示正常退出,非零值表示异常情况。

. 1195

c语言(函数栈帧的创建和销毁)

函数栈帧的创建和销毁

小马同学的博客 2293

深刨栈帧中的函数,变量创建与销毁

最后来到我们的主函数里面,刚刚我们开辟空间的时候看到的是esp的值赋给了ebp,现在我们用完了它,需要释放main函数的空间了也就不需要ebp和esp来维护了,我们就可以把ebp的值给到esp,然后在pop 一下ebp那么此时的esp就指向了栈底,中间已经没有需要维护的栈区了。这是说sub这个指令会让esp的地址减去一个十六进制的0xe4,产生新的esp,此时的esp就是维护main函数的esp,结合刚刚得到的ebp,就产生了一块新的地址,那么这块地址就是为main函数预开辟的一块空间。

Trustmeican的博客 636

vc创建一个线程和销毁的方法

创建线程使用CreateThread The CreateThread function creates a thread to execute within the address space of the calling process.    HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,

wangluozhangleilei的专栏 2852

vc创建一个线程方法

vc创建一个线程方法创建线程使用CreateThread The CreateThread function creates a thread to execute within the address space of the calling process.    HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttrib...

weixin_34161029的博客 297

VC中关于创建一个新的线程方法

CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别 转自:http://www.cnblogs.com/chuncn/archive/2009/03/08/1406096.html CreateThread是Windows的API函数(SDK函数的标准形式,直截了当的创建方式,任何场合都可以使用),提供操作系统级

Arcsinsin的学习笔记 2495

c语言里 如何取得线程的lpparameter'参数,09年计算机二级辅导:VC创建多个线程方法...

09年计算机二级辅导:VC创建多个线程方法分类:计算机等级|更新时间:2016-07-07|来源:中华网考试在VC中,无非是创建线程和写线程函数1, 创建线程:  #include 在MFC中通常在OnInitDialog()下面创建线程//定义参数:SerialControl//------------------变量函数初始化调用区域--------CSerialControl * m_S...

weixin_33966205的博客 183

一个线程函数模板

http://zhidao.baidu.com/question/41421810.html 如果是在用VC中想用多个线程运行同样的任务,而这些任务之间没有通讯问题和内存共享的问题,那可以用下面的模板: DWORD WINAPI TaskThreadProc(LPVOID) { // 独立任务 // ... } void RunTaskUseMultiThread(int nThre

xfortius的专栏 1434

C- 一个线程的例子

网易公开课,一个线程的例子,VC2010控制台程序测试通过。 //  一个飞机票售票的实现。 // #include "stdafx.h" #define AGENTNUM 3 HANDLE hSemaphore; typedef struct _THREADDATA {  int agent;  int *numTickets; }*LPTHREADDATA, THRE

非程序员专栏 1073

VC封装Ping命令的实现

本文给出了网络编程中封装ping命令的一种实现方式,能够在程序启动后一直ping目标网络。

大道至简,知易行难 4059

CreateThread创建线程传递结构体参数

一般mfc创建线程的函数用的最多的有两个:AfxBeginThread和CreateThread。首先来学习CreateThread。         CreateThread线程函数及参数如下:         HANDLE CreateThread(            LPSECURITY_ATTRIBUTES lpThreadAttributes,  // pointer to s

风铃中的刀声 1万+

线程函数数组、函数指针数组在应用中的一些总结

在工作中遇到这样的一个问题:假设有1000个串口的数据需要接收并处理(串口的个数极端一些,目的是好说明问题),以Windows下的VC为例,一般的每一个串口接收都对应一个接收并处理函数,是不是需要写1000个这样的函数?这是第一个问题。如果每一个串口的接收处理函数都基本相同,唯一不同可以从传递进来的参数,在做接收处理时用该参数区分开来,那么是否可以将这1000个函数写成一个“共用”函数?这是第二个

dijkstar的专栏 864

vc 线程创建、暂停和结束

1.线程创建:    (1)CWinThread* MainThread;       MainThread=AfxBeginThread(MyThread,this,THREAD_PRIORITY_NORMAL,0,0,NULL );    (2)后台工作线程函数       UINT MyThread( LPVOID pParam )       {            C类Dlg * p

DotLive 1085

VC创建删除线程

<br />本来照例要先介绍线程的几种死法,但是考虑到很多Windows程序员经常混淆线程API,搞不清楚到底该用哪个。所以先来说一下两套线程 API的问题。<br />  首先,Windows操作系统本身提供了线程创建函数CreateThread 和销毁函数ExitThread 。其中的CreateThread 用于创建线程,ExitThread 用于在线程函数内部推出线程(也就是自杀)。<br />  其次,在Visual C++自带的C运行库(以下简称CRT)中,还带了另外4个API函数,分别是:_

zhanglidn013的专栏 2635

VC创建线程

作中我们经常会遇到要建立多个线程,以此方便于我们可以同时执行多个事件。这也是我们在VC开发中的一项基础,虽然我曾多次用到,但也会常常忘记。这次记下来,作为一个笔记,为大家学习提供方便。 在VC中,无非是创建线程和写线程函数 一、常规方法:纯使用Platform SDKAPI.1, 创建线程: #include 在MFC中通常在OnInitDialog()下面创建线程 //定义参数:SerialC

jiangxinyu的专栏 2万+

VC中如何创建多个线程

在工作中我们经常会遇到要建立多个线程,以此方便于我们可以同时执行多个事件。这也是我们在VC开发中的一项基础,虽然我曾多次用到,但也会常常忘记。这次记下来,作为一个笔记,为大家学习提供方便。在VC中,无非是创建线程和写线程函数1,  创建线程:#include 在MFC中通常在OnInitDialog()下面创建线程//定义参数:SerialControl//----

ywywcy的专栏 1257
上一篇: VC中使用CInternetSession抓取网页内容
下一篇: 局域网dos命令集
msbbc
博客等级 码龄18年 39粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值