多线程与异步套接字的编程笔记

1、什么是多线程?

在Windows操作系统中,线程是指系统中最小的功能执行单元,可以独立完成某一项功能,如果用多线程处理某个功能,会比单线程效率高很多

  使用线程的好处有以下几点:

  ·1)使用线程可以把占据长时间的程序中的任务放到后台去处理

  ·2)用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度


2、创建线程

Win32 提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作。下面将选取其中的一些重要函数进行说明。
1、HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,
                 DWORD dwStackSize,
                 LPTHREAD_START_ROUTINE lpStartAddress,
                 LPVOID lpParameter,
                 DWORD dwCreationFlags,
                 LPDWORD lpThreadId);
该函数在其调用进程的进程空间里创建一个新的线程,并返回已建线程的句柄,其中各参数说明如下:
lpThreadAttributes:指向一个 SECURITY_ATTRIBUTES 结构的指针,该结构决定了线程的安全属性,一般置为 NULL;
dwStackSize:指定了线程的堆栈深度,一般都设置为0;
lpStartAddress:表示新线程开始执行时代码所在函数的地址,即线程的起始地址。一般情况为(LPTHREAD_START_ROUTINE)ThreadFunc,

ThreadFunc
是线程函数名;
lpParameter:指定了线程执行时传送给线程的32位参数,即线程函数的参数;
dwCreationFlags:控制线程创建的附加标志,可以取两种值。如果该参数为0,线程在被创建后就会立即开始执行;如果该参数为

CREATE_SUSPENDED,则系统产生线程后,该线程处于挂起状态,并不马上执行,直至函数ResumeThread被调用;

lpThreadId:该参数返回所创建线程的ID;
如果创建成功则返回线程的句柄,否则返回NULL。


3、
创建一个基于控制台程序窗口的工程(就是大学学C语言的工程)
源码如下:
#include <windows.h>									//包含相应头文件
#include <stdio.h>										
DWORD WINAPI myfun1(								//声明线程函数
  LPVOID lpParameter   
);
DWORD WINAPI myfun2(
  LPVOID lpParameter   
);
int main()											//主函数
{
	HANDLE h1,h2;									//定义句柄变量
	h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);			//创建线程1
	printf("线程1开始运行!\r\n");							//输出线程1运行信息
	h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);			//创建线程2
	printf("线程2开始运行!\r\n");							//输出线程2运行信息
	::CloseHandle(h1);									//关闭线程句柄对象
	::CloseHandle(h2);
    if(getchar()=='q')									//如果用户输入字符"q"
	{
		return 0;										//程序正常退出
	}
	else												//如果用户输入的字符不是"q"
	{
		::Sleep(100);									//程序睡眠
	}
}
DWORD WINAPI myfun1(LPVOID lpParameter) 				//分别实现线程函数
{
	printf("线程1正在运行!\r\n");							//输出信息
	return 0;											//正常结束线程函数
}
DWORD WINAPI myfun2(LPVOID lpParameter) 
{
	printf("线程2正在运行!\r\n");
	return 0;
}

结果如下:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值