多线程~~简单的线程创建,C语言实现

  线程,是计算机中最小的执行单元。通常,在window应用程序运行时,操作系统都会为其自动创建一个线程,即主线程。通过主线程,可以创建多个线程或进程。

  使用多线程,可以提高程序的执行效率。

  线程创建函数CreateThread(),属于API函数;

  函数原型为:

HANDLE CreateThread(  
  LPSECURITY_ATTRIBUTES lpThreadAttributes, 
  DWORD dwStackSize,                        
  LPTHREAD_START_ROUTINE lpStartAddress,   
  LPVOID lpParameter,                
  DWORD dwCreationFlags,                 
  LPDWORD lpThreadId   );
参数含义:

lpThreadAttributes是一个指向结构体SECURITY_ATTRIBUTES的指针,表示指定新建线程的安全属性。该参数可以设置为NULL,表示创建线程时使用默认的安全属性。

dwStackSize指定线程初始化时地址空间的大小。如果这个参数指定为0,那么新创建的线程的地址空间大小与调用该函数的线程地址空间大小一样。

lpStackAddress将指定该线程的线程函数的地址。当线程创建成功后,新建线程将调用该线程函数执行某个功能。

lpParameter表示将要传递给新建线程的命令行参数,新建线程可以根据该命令参数的不同而执行不同的功能。

dwCreationFlags用于指定新建线程创建后是否立即执行。有两个状态值,一个是CREATE_SUSPENDED,作用是创建线程成功后暂停运行;另一个是0,作用是创建线程成功后立即运行。

lpThreadId表示新建线程的ID号,一般设置为NULL。


下面是一个简单的线程创建例子:

#include <stdio.h>
#include <windows.h>

DWORD WINAPI myfun1(LPVOID lpParameter);                   //声明线程函数

DWORD WINAPI myfun2(LPVOID lpParameter);

int main()
{ 
	HANDLE h1, h2;                                         //定义句柄变量
	h1 = ::CreateThread(NULL, 0, myfun1, NULL, 0, NULL);   //创建线程
	printf("线程1开始运行!\r\n");
	h2 = ::CreateThread(NULL, 0, myfun2, NULL, 0, NULL);
	printf("线程2开始运行!\r\n");
	::CloseHandle(h1);                                     //关闭线程句柄对象
	::CloseHandle(h2);
	if(getchar() == 'q')
	{
		return 0;
	}
	else 
		::Sleep(1000);
	return 0;
}

DWORD WINAPI myfun1(LPVOID lpParameter)                     //分别实现线程函数
{
	printf("线程1正在运行!\r\n");
	return 0;
}
DWORD WINAPI myfun2(LPVOID lpParameter)
{
	printf("线程2正在运行!\r\n");
	return 0;
}


结果是乱的,没有实现线程同步,线程同步的将会在以后写
下面是运行结果样例:


  • 30
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值