Windows 下 C语言多线程

#define _CRT_SECURE_NO_WARNINGS
#include 
   
   
    
    
#include 
    
    
     
     
#include 
     
     
      
      
#include 
      
      
       
       

#define MAX_THREADS 10
#define MAX_BUF_SIZE 255

//多线程

//定义一个结构体
typedef struct _MyData
{
int id;
int val2;
}MyData, *pMyData;


void  Myprintf(int i)
{
	Sleep(100);
	printf("线程 %d --》准备工作 \n", i);
	Sleep(150);
	printf("线程 %d --》工作中...\n", i);
	Sleep(200);
	printf("线程 %d --》工作完结束\n", i);
}


//线程执行函数
DWORD WINAPI MyThreadPro(LPVOID lpParam)
{
	MyData* pa = (MyData*)lpParam;
	printf("启动线程:%d \n", pa->id);
	Myprintf( pa->id);
	return 0;


	//返回调用进程的默认内存堆句柄。
}



void main()
{
	//创建线程1        //注:在MFC程序中,应该调用AfxBeginThread函数,在Visual C++程序中应调用_beginthreadex函数,  _endthread来销毁线程。
	/*HANDLE CreateThread(
		LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
		SIZE_T dwStackSize,                       // initial stack size
		LPTHREAD_START_ROUTINE lpStartAddress,    // thread function
		LPVOID lpParameter,                       // thread argument
		DWORD dwCreationFlags,                    // creation option
		LPDWORD lpThreadId                        // thread identifier
		);
     */
	pMyData pData;
	DWORD dwThreadId[MAX_THREADS];
	HANDLE hThread[MAX_THREADS];

	//for循环创建多个线程
	for (int i = 0; i < MAX_THREADS; i++)
	{
		//参数数据
		pData =(pMyData) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof MyData);  //即在进程默认堆内存上申请了一个不可移动的空间,大小为sizeof(Data)的内存空间
		if(pData == NULL) 
			ExitProcess(2);
		pData->id = i;
		pData->val2 = i + 100;
		
		//创建线程
		hThread[i] = CreateThread(NULL, 0, MyThreadPro, pData, 0, &dwThreadId[i]);
		if (hThread[i] == NULL)
		{
			ExitProcess(i);
		}

		Sleep(120);
	}

	//等待所有线程结束
	WaitForMultipleObjects(MAX_THREADS, hThread, true, INFINITE);

	//通过CloseHandle函数来关闭该线程对象
	for (int i = 0; i < MAX_THREADS; i++)
	{
		CloseHandle(hThread[i]);
	}

printf("hello....\n");  //线程结束后执行
system("pause");
return ;
}
      
      
     
     
    
    
   
   

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值