新建线程

任何函数都可以新建自己的子线程,互相之间没有影响。
新建线程是一个临时变量,所以句柄命名可以一样。

 //新建一个线程
    HANDLE hThread1 = CreateThread(NULL,0,SendProc,(LPVOID)this,0,NULL);
    CloseHandle(hThread1);

第三个参数是线程函数的名字。
第四个参数:向线程函数传递的参数,是一个可以指向任意类型的指针,不需传递参数时,为NULL。对于基于对话框的编程,一般会传递一个this指针,方便子线程可以操作对话框的成员变量或者控件。当需要传递的参数比较多时,比如网络编程时需要向子线程传入套接字,可以传递一个结构体指针,把所有需要传递的参数都放进结构体中,机构体中可以有指针,也可以有值。

//结构体声明放在头文件中
struct RECVPARAM
{
	SOCKET sock;
	CDlg *pDlg;
};
//结构体定义放在源文件中
RECVPARAM *pRecvParam=new RECVPARAM;
pRecvParam->pDlg= this;
pRecvParam->sock = m_socket;	
 //新建一个线程	
HANDLE hThread1 = CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL);
CloseHandle(hThread1);

其他几个参数不需要改动。

线程入口函数只能是全局函数,或者类的静态函数。

//源文件中:全局函数
DWORD WINAPI RecvProc(LPVOID lpParameter)
{
}

//头文件中:静态成员函数
static DWORD WINAPI RecvProc(LPVOID lpParameter);
//源文件中:静态成员函数
DWORD WINAPI CLED显示屏升级Dlg::RecvProc(LPVOID lpParameter)
{
}

线程函数的第一步要接收参数

//接收参数:单独的this指针
CLED显示屏升级Dlg *pDlg = (CLED显示屏升级Dlg *)lpParameter;	

//接收参数:结构体指针
CDlg *pDlg = ((RECVPARAM_COM *)lpParameter)->pDlg;
SOCKET sock =  ((RECVPARAM_COM *)lpParameter)->sock;

最后一步要有返回值

//返回
return 0;

在线程函数里,只要用到对话框的成员,前边必须加上指针pDlg->。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值