作者:http://blog.csdn.net/wangningyu/article/details/4404134
平时在MFC里使用多线程时其实是很方面的,因为微软提供了一个API让我们很方面的去创建线程:下面是MSDN中关于CreateThread的函数原型:
1、函数原型声明:
- CreateThread
-
- The CreateThread function creates a thread to execute within the virtual address space of the calling process.
-
- To create a thread that runs in the virtual address space of another process, use the CreateRemoteThread function.
-
-
- HANDLE CreateThread(
- LPSECURITY_ATTRIBUTES lpThreadAttributes,
- SIZE_T dwStackSize,
- LPTHREAD_START_ROUTINE lpStartAddress,
- LPVOID lpParameter,
- DWORD dwCreationFlags,
- LPDWORD lpThreadId
- );
2、参数说明:
- lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL,表示使用缺省值。
-
-
- dwStackSize,线程堆栈大小,一般=0,在任何情况下,Windows根据需要动态延长堆栈的大小。
-
-
- lpStartAddress,指向线程函数的指针,形式:@函数名,函数名称没有限制,但是必须以下列形式声明:
-
-
- DWORD WINAPI ThreadProc (LPVOID pParam) ,格式不正确将无法调用成功。
-
-
- lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为Nil。
-
-
- dwCreationFlags :线程标志,可取值如下
-
-
- CREATE_SUSPENDED: 创建一个挂起的线程
-
-
- 0 :创建后立即激活。
-
-
- lpThreadId:保存新线程的id。
3、返回值:
函数成功,返回线程句柄;函数失败返回false。
4、实例代码:
A、新建一个对话框工程为MFC,在MFCDlg.h添加两个成员函数,注意一定要是静态的,代码如下:
-
- class CMFCDlg : public CDialog
- {
- public:
- CMFCDlg(CWnd* pParent = NULL);
-
-
- static DWORD WINAPI ThreadB1(LPVOID lpParam);
- static DWORD WINAPI ThreadB2(LPVOID lpParam);
-
- ......
- }
B、在cpp文件中实现函数,添加代码如下:
- DWORD WINAPI CMFCDlg::ThreadB1(LPVOID lpParam)
- {
-
- PROCESS_INFORMATION pi;
- STARTUPINFO si;
- BOOL bRet;
-
-
- ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
- ZeroMemory(&si,sizeof(STARTUPINFO));
-
-
- si.cb = sizeof(STARTUPINFO);
- si.lpReserved = NULL;
- si.lpDesktop = NULL;
- si.lpTitle = NULL;
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_SHOWNORMAL;
- si.cbReserved2 = NULL;
- si.lpReserved2 = NULL;
-
- bRet = CreateProcess(_T("C://Program Files//Internet Explorer//IEXPLORE.exe"),
- _T("http://www.coderfans.cn"),
- NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
- return 0;
- }
-
- DWORD WINAPI CMFCDlg::ThreadB2(LPVOID lpParam)
- {
-
- PROCESS_INFORMATION pi;
- STARTUPINFO si;
- BOOL bRet;
-
-
- ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
- ZeroMemory(&si,sizeof(STARTUPINFO));
-
-
- si.cb = sizeof(STARTUPINFO);
- si.lpReserved = NULL;
- si.lpDesktop = NULL;
- si.lpTitle = NULL;
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_SHOWNORMAL;
- si.cbReserved2 = NULL;
- si.lpReserved2 = NULL;
-
- bRet = CreateProcess(_T("C://Program Files//Internet Explorer//IEXPLORE.exe"),
- _T("http://blog.csdn.net/wangningyu"),
- NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
-
- return 0;
- }
C、然后在对话框初始化时创建进程即可,代码如下:
- BOOL CMFCDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- ......
-
-
-
- SetIcon(m_hIcon, TRUE);
- SetIcon(m_hIcon, FALSE);
-
-
- DWORD dw1,dw2;
- CreateThread(NULL,0,ThreadB1,NULL,0,&dw1);
- Sleep(100);
-
- CreateThread(NULL,0,ThreadB2,NULL,0,&dw2);
- Sleep(100);
- return TRUE;
- }
5、MFC创建多线程完成,就这么简单咯!
转:MFC创建多线程实例
原文:http://www.cnblogs.com/yfz0/p/5832598.html