win32 API实现多线程小例程

win32 API实现多线程小例程

1.API函数

(1)CreateThread 创建线程
(2)SuspendThread 挂起线程
(3)ResumeThread 结束线程的挂起状态,执行线程
(4)ExitThread 该函数用于线程终结自身的执行,主要在线程的执行函数被调用。
(5)TerminateThread 强行终止某一线程的执行。注:但是使用该函数立即终止线程的执行,但并不释放线程所占用的资源,故不建议使用该函数。
(6)PostThreadMessage,该函数将一条消息放在指定线程的消息队列中,并且不等到该消息该线程处理时返回。如果即将接收消息的线程没有创建消息循环,则该函数执行失败。

      具体的函数大家可以自行百度,应该很容易都会找到各函数的准确的定义。
2.编程实例

2.1实例1
      创建对话框,在对话框上添加两个按钮和一个编辑框,ID分别为IDC_START,IDC_STOP,IDC_TIME。
头文件:
类外添加代码:

void ThreadFunc();    //线程函数
static BOOL m_bRun;   //全局变量

对话框类内代码:

HANDLE hThread;       //线程函数的句柄
DWORD ThreadID;       //线程函数的ID

源文件:
类外添加代码:

//线程函数
void ThreadFunc()
{
	CTime time;
	CString strTime;
	m_bRun = TRUE;
	while (m_bRun)
	{
		time = CTime::GetCurrentTime();
		strTime = time.Format("%Y-%m-%d %H:%M:%S %W-%A");
		::SetDlgItemText(AfxGetApp()->m_pMainWnd->m_hWnd, IDC_TIME, strTime);//AfxGetApp()->m_pMainWnd->m_hWnd查询当前线程的主窗口句柄
		Sleep(1000);
	}
}

类内添加代码:

//启动函数
void CMultiThread1Dlg::OnBnClickedStart()
{
	// TODO: 在此添加控件通知处理程序代码
	hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,NULL,0,&ThreadID);   //创建线程函数
	GetDlgItem(IDC_START)->EnableWindow(FALSE);   
	GetDlgItem(IDC_STOP)->EnableWindow(TRUE);
}
//暂停函数
void CMultiThread1Dlg::OnBnClickedStop()
{
	// TODO: 在此添加控件通知处理程序代码
	m_bRun = FALSE;
	GetDlgItem(IDC_START)->EnableWindow(TRUE);
	GetDlgItem(IDC_STOP)->EnableWindow(FALSE);
}

1.2.2 实例2
创建对话框,在对话框上添加1个按钮和一个编辑框,ID分别为IDC_START,IDC_COUNT。并给编辑框添加int型变量,m_nCount。
头文件:
类外添加代码:

void ThreadFunc(int integer);   //线程函数

对话框类内代码:

HANDLE hThread;       //线程函数的句柄
DWORD ThreadID;       //线程函数的ID

源文件:
类外添加代码:

//线程函数
void ThreadFunc(int integer)
{
	int i;
	for ( i = 0; i < integer; i++)
	{
		Sleep(1000);
	}
}

类内添加代码:

//消息函数
void CMultiThread2Dlg::OnBnClickedStart()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	int interger = m_nCount;
	hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,(VOID*)interger,0,&ThreadID);
	GetDlgItem(IDC_START)->EnableWindow(FALSE);
	WaitForSingleObject(hThread,INFINITE);
	GetDlgItem(IDC_START)->EnableWindow(TRUE);
}

1.2.3 实例3
      创建对话框,在对话框上添加一个按钮、一个编辑框和一个进度条,ID分别为IDC_MILLISECOND,IDC_PROGRESS1,IDC_START。并给编辑框添加int型变量,m_nMilliSecond;为进度添加CProgressCtrl型变量,m_ctrlProgress。
头文件:
类外添加变量:

struct threadinfo
{
	UINT nMilliSecond;
	CProgressCtrl *pctrlProgess;
};
//线程函数
UINT ThreadFunc(LPVOID lpParam);
static threadinfo Info;      //线程需要使用的变量

类内添加变量:

HANDLE hThread;   //线程句柄
DWORD ThreadID;   //线程ID
int m_nMilliSecond;
CProgressCtrl m_ctrlProgress;

源文件:
类外添加代码:

//线程函数
UINT ThreadFunc(LPVOID lpParam)
{
	threadinfo *pInfo = (threadinfo *)lpParam;
	for (int i = 0; i < 100; i++)
	{
		int nTemp = pInfo->nMilliSecond;
		pInfo->pctrlProgess->SetPos(i);
		Sleep(nTemp*10);
	}
	return 0;
}

类内添加代码:

//消息函数
void CMultiThread3Dlg::OnBnClickedStart()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(FALSE);
	Info.nMilliSecond = m_nMilliSecond; 
	Info.pctrlProgess = &m_ctrlProgress;
	hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,&Info,0,&ThreadID);
}

      准确的说,这些代码并不是自己原创,是参考一篇文档《多线程编程的入门教程》。但根据自己的要求也改了改,也就假装自己是原创吧。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值