多线程~~简单的线程创建,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 
#include 

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;
}


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

多线程~~简单的线程创建,C语言实现_第1张图片

你可能感兴趣的:(多线程)