MFC实用技巧之线程与线程同步的简单运用

线程创建

DWORD WINAPI ThreadProFunc1(void *pParam)
{
	while (thread1_is_run)
	{
		printf("this is thread1\n");
		Sleep(1000);
	}

	return 0;
}

void Cdemo5Dlg::OnBnClickedBtnThread1()
{
	// TODO: 在此添加控件通知处理程序代码
	if (!thread1_is_run) {
		HANDLE hThread;
		DWORD dwThreadId;
		thread1_is_run = true;
		hThread = CreateThread(NULL	// 默认安全属性
			, NULL		// 默认堆栈大小
			, ThreadProFunc1 // 线程入口地址
			, NULL	//传递给线程函数的参数
			, 0		// 指定线程立即运行
			, &dwThreadId	//线程ID号
		);

		CloseHandle(hThread);	//关闭线程句柄,内核引用计数减一
	} else {
		thread1_is_run = false;
	}

	if(thread1_is_run)
		SetDlgItemText(IDC_BTN_THREAD1, _T("终止"));
	else
		SetDlgItemText(IDC_BTN_THREAD1, _T("创建线程1"));
	SetEvent(hEventThread3);
}

这里我用一个button控件控制线程的创建和终止,ThreadProFunc1为线程的入口函数,注意在线程中最好设置一个休眠时间,不然会一直占用cpu资源,导致程序挂死。

线程同步

DWORD WINAPI ThreadProFunc3(void *pParam)
{
	printf("thread3 is running...\n");
	while (1)
	{
		WaitForSingleObject(hEventThread3, INFINITE);//INFINITE,无限等待

		if (thread1_is_run)
			printf("thread1_is_runing\n");
		else
			printf("thread1_is_exit\n");
		ResetEvent(hEventThread3);
	}

	CloseHandle(hEventThread3);
	return 0;
}

这里我介绍的是Event的方式,我在另一个线程中去监视线程1的使用情况,利用WaitForSingleObject(hEventThread3, INFINITE);无限等待hEventThread3事件,该事件在线程1创建或者是终止时被设置(SetEvent(hEventThread3))

另外,创建一个新的event使用hEventThread3 = CreateEvent(NULL, TRUE, FALSE, NULL);

验证结果请可以去运行demo程序

 

相关资料包括demo代码请到我<MFC实用技巧>篇最下的网盘链接中下载!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在云巅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值