mfc对话框类中多线程


做数据库的查询和显示,用到多线程。(对话框点击按钮查询,然后列表显示)


1、先定义线程函数

unsigned int __stdcall CDlg::QueryThreadFunc1( LPVOID lParam )
{
	CDlg *pThis = reinterpret_cast<CDlg*>( lParam );	
		pThis->DoOracleQuery();
	return 0;
}

这个在头文件中是静态函数:

static unsigned int __stdcall QueryThreadFunc1(LPVOID lParam);

上述代码中,

DoOracleQuery()是普通函数,里面是数据查询处理。

2、创建线程

m_hQueryThread是成员变量,HANDLE类型

void CDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	if(!InitDB())
	{
		return;
	}

	m_hQueryThread = reinterpret_cast<HANDLE>(::_beginthreadex(NULL, 0, QueryThreadFunc1, reinterpret_cast<void*>(this), CREATE_SUSPENDED, 0));

	if (m_hQueryThread != NULL)
	{
		::ResumeThread(m_hQueryThread);
	}
}

上面这个是一次性线程,在启动线程后,可以直接

CloseHandle(m_hQueryThread);
m_hQueryThread = INVALID_HANDLE_VALUE;

有时候,我们需要在线程中做while循环操作。

如:

void DoParseRecv()
{
   while(m_bRunning)
   {
      Sleep(5);
   }
}

这时,在创建线程前,将m_bRunning置为TRUE。

退出程序时(或其他任何时候),关闭线程

m_bRunning = false;
if (m_hThd != INVALID_HANDLE_VALUE)
{
	WaitForSingleObject(m_hThd, INFINITE);
	CloseHandle(m_hThd);
	m_hThd = INVALID_HANDLE_VALUE;
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值