MFC多线程建立
来源:互联网 发布:淘宝明星同款违规吗 编辑:程序博客网 时间:2024/06/05 11:03
先说说线程的的概念,因为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"
好了,编译并运行程序吧。每单击一次“用户界面线程”按钮,都会弹出一个线程对话框,在任何一个线程对话框内按下鼠标左键,都会弹出一个消息框。
原地址点击打开链接;
- MFC多线程建立
- MFC下多线程的建立
- 多线程MFC
- MFC 多线程
- MFC多线程
- MFC多线程
- MFC多线程
- MFC多线程
- mfc多线程
- MFC多线程
- MFC多线程
- MFC多线程
- MFC 多线程
- MFC 多线程
- MFC多线程
- MFC多线程
- MFC多线程
- MFC 多线程
- 反思
- 递归
- opencv——canny算子提取图像边缘
- Hadoop Hbase 分布式部署
- Beautifulsoup爬小说
- MFC多线程建立
- Git学习总结
- java API 部分注释格式
- [bzoj1598][Usaco2008 Mar]牛跑步 dijkstra k短路
- python NLP总结
- checkbox的change事件(IE浏览器change事件问题及解决方法)
- Android 实现RecyclerView嵌套RecyclerView 实现购物车的全选 反选 单选 商家全选
- 第八周项目1-建立顺序串的算法库
- 栈匹配括号(STL实现)