Windows程序设计学习笔记——进程(一)

一、相关概念

程序:磁盘的可执行文件(如windows的exe,linux的elf文件)

进程:代码执行所需要的所有资源(虚拟内存,堆栈等等)

线程:操作系统能够进行运算调度的最小单位,包含在进程之中

二、线程的创建

HANDLE WINAPI CreateThread(
  __in_opt   LPSECURITY_ATTRIBUTES lpThreadAttributes,    //安全属性
  __in       SIZE_T dwStackSize,   
  __in       LPTHREAD_START_ROUTINE lpStartAddress,      //回调函数地址
  __in_opt   LPVOID lpParameter,   
  __in       DWORD dwCreationFlags,
  __out_opt  LPDWORD lpThreadId
);

函数执行成功返回新线程句柄,失败返回null

第二个参数是线程分配的栈空间大小,填0则是默认,每个线程的堆栈空间都是独立的

第三个参数lpStartAddress为回调函数地址,是一个函数指针,指向如下函数:

DWORD WINAPI ThreadProc(
  __in  LPVOID lpParameter
);

该函数是线程开始执行的位置,参数lpParameter是用户自定义的

第四个参数就是上方回调函数的参数

第五个参数dwCreationFlags是线程创建标志,可以为以下值

 0表示线程一创建就开始执行代码,CREATE_SUSPENDED表示将线程先挂起

最后一个参数是传出参数,可以获得线程id,可选项

 三、进程的暂停

线程休眠函数:

VOID WINAPI Sleep(
  __in  DWORD dwMilliseconds    //暂停时间,单位毫秒
);

参数值为零表示线程会放弃剩余时间片,但是马上会进入就绪状态,如果值为1则是放弃时间片后休眠1毫秒,然后才恢复,如果没有其他具有相同优先级的线程可以运行,则函数立即返回,线程继续执行。

值为INFINITE(无穷大)表示暂停不应超时

线程挂起(不给线程分配时间片)函数:

DWORD WINAPI SuspendThread(
  __in  HANDLE hThread    //线程句柄
);    //线程挂起


DWORD WINAPI ResumeThread(
  __in  HANDLE hThread
);    //线程恢复

四、线程的退出

1.从线程回调函数返回(return) 

2.ExitThread函数:

VOID WINAPI ExitThread(
  __in  DWORD dwExitCode    //退出码
);

3.TerminateThread函数

BOOL WINAPI TerminateThread(
  __inout  HANDLE hThread,    //线程句柄
  __in     DWORD dwExitCode    //退出码
);   

2和3两个函数使用时要注意资源的释放

示例:

//MFC
DWORD Threadroc(LPVOID lpParameter)
{
	//线程回调函数
	HWND hw= ::FindWindow(NULL, "thread");
	for (int i = 0; i < 10000000; i++)
	{
		if (flag == false)
		{
			ExitThread(0);
		}

		SetDlgItemInt(hw, IDC_EDIT1, i, false);
	}
		
	return 0;
}

void CcreatethreadDlg::OnBnClickedButton1()
{
	//创建线程
	hdthread=CreateThread(NULL, 0,Threadroc,NULL,0,NULL );
	if (hdthread == NULL)
	{
		AfxMessageBox("线程创建失败");
	}
	
}


void CcreatethreadDlg::OnBnClickedButton4()
{
	//线程退出
	flag = false;
	//TerminateThread(hdthread, 0);		//结束线程
}



void CcreatethreadDlg::OnBnClickedButton3()
{
	//线程挂起
	SuspendThread(hdthread);
	
}


void CcreatethreadDlg::OnBnClickedButton2()
{
	//线程恢复
	ResumeThread(hdthread);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值