先说说线程的的概念,因为windows不同于单片机可以同时自行很多操作,这些同时进行的操作就是一个个线程,我们在编写程序时有时也需要操作多个线程,于是就要程序实现多线程。
我们把一个进程想象中桌子,线程就是上面的菜品,windows新建菜很容易,推建大家都是一张桌子上吃饭,Linux新建桌子就比较容易,所以推荐大家新建桌子。因为服务器都是很多进程的所以服务器一般都是用linux写的。
windows建立线程比较容易所以,windows建议大家新建线程。话不多说,我们开始建立线程。
线程有两个用户界面线程和工作者线程
一、工作者线程
这个很简单
在你想执行另外一个线程时创建一个线程
在你定义的类cxxxxdlg.h中定义:CWinThread* pThread;//多线程指针
在你想启动多线程时
pThread=AfxBeginThread(XXXXXXXX,想传递的参数,若无NULL);
在这个线程函数 xxxxx中执行你想执行的操作就可以了
void Ccmare_1Dlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
info.ms=ms;
info.ms_p=&ms_p;
pThread=AfxBeginThread(ThreadFunc1,&info);
}
UINT ThreadFunc1(LPVOID lpParam)
{
char strtemp[200];
while(take_flage!=0);
take_picture(strtemp);
return 0;
}
我这个函数的作用就是在点下按钮BUTTUN4后执行调取一张图片,而且不会影响我另一个程序的摄像头持续录像的功能。
还有一个就是用户界面线程
这个是用来进行多对话框弹出时才会使用,在同一个对话框就不需要使用用户界面线程
例程6 MultiThread6
建立一个基于对话框的工程MultiThread6,在对话框IDD_MULTITHREAD6_DIALOG中加入一个按钮IDC_UI_THREAD,标题为“用户界面线程” 右击工程并选中“New Class…”为工程添加基类为CWinThread派生线程类CUIThread。 给工程添加新对话框IDD_UITHREADDLG,标题为“线程对话框”。 为对话框IDD_UITHREADDLG创建一个基于CDialog的类CUIThreadDlg。使用ClassWizard为CUIThreadDlg类添加WM_LBUTTONDOWN消息的处理函数OnLButtonDown,如下:
1.
void
CUIThreadDlg::OnLButtonDown(
UINT
nFlags, CPoint point)
2.
{
3.
AfxMessageBox(
"You Clicked The Left Button!"
);
4.
CDialog::OnLButtonDown(nFlags, point);
5.
}
在UIThread.h中添加
1.
#include "UIThreadDlg.h"
并在CUIThread类中添加protected变量CUIThread m_dlg:
01.
class
CUIThread :
public
CWinThread
02.
{
03.
DECLARE_DYNCREATE(CUIThread)
04.
protected
:
05.
CUIThread();
// protected constructor used by dynamic creation
06.
07.
// Attributes
08.
public
:
09.
10.
// Operations
11.
public
:
12.
13.
// Overrides
14.
// ClassWizard generated virtual function overrides
15.
//{{AFX_VIRTUAL(CUIThread)
16.
public
:
17.
virtual
BOOL
InitInstance();
18.
virtual
int
ExitInstance();
19.
//}}AFX_VIRTUAL
20.
21.
// Implementation
22.
protected
:
23.
CUIThreadDlg m_dlg;
24.
virtual
~CUIThread();
25.
26.
// Generated message map functions
27.
//{{AFX_MSG(CUIThread)
28.
// NOTE - the ClassWizard will add and remove member functions here.
29.
//}}AFX_MSG
30.
31.
DECLARE_MESSAGE_MAP()
32.
};
分别重载InitInstance()函数和ExitInstance()函数:
01.
BOOL
CUIThread::InitInstance()
02.
{
03.
m_dlg.Create(IDD_UITHREADDLG);
04.
m_dlg.ShowWindow(SW_SHOW);
05.
m_pMainWnd=&m_dlg;
06.
return
TRUE;
07.
}
08.
09.
int
CUIThread::ExitInstance()
10.
{
11.
m_dlg.DestroyWindow();
12.
return
CWinThread::ExitInstance();
13.
}
双击按钮IDC_UI_THREAD,添加消息响应函数:
1.
void
CMultiThread6Dlg::OnUiThread()
2.
{
3.
CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));
4.
}
并在MultiThread6Dlg.cpp的开头添加:
1.
#include "UIThread.h"
好了,编译并运行程序吧。每单击一次“用户界面线程”按钮,都会弹出一个线程对话框,在任何一个线程对话框内按下鼠标左键,都会弹出一个消息框。
原地址点击打开链接;