MFC线程基本

原创 2012年03月24日 16:24:56

线程的创建很简单,只要在类当中新建一个函数(非成员函数),然后在事件中触发就可以了,如:

UINT MessageThread(LPVOID pParam)//不能用成员函数
{
	char* pMessage=(char*)pParam;
	CWnd* pMainWnd=AfxGetMainWnd();
	::MessageBox(pMainWnd->m_hWnd,pMessage,"Thread",MB_OK);
	eventObj.Lock();
	pMessage="Thread1 unlock";
	::MessageBox(pMainWnd->m_hWnd,pMessage,"Thread1 message",MB_OK);
	return 0;
}

AfxBeginThread(MessageThread,"Thread1 start");//调用MessageThread,第二个参数可以传任意类型的东西给线程函数,这个就启动了一个线程了


对于多界面及工作线程,跟JAVA的也大同小异,可以自建一个类CMyThread继续自CWinThread,用户界面例如就继续自CFrameWnd

然后通过主界面VIEW当中启动CMyThread:

AfxBeginThread(RUNTIME_CLASS(CMyThread));//启动线程来启动一个窗口

这里主线程会新建一个CMyThread线程,并调用其InitInstance()函数进行初始化,这时可以在初始化当中进行操作,如:

BOOL CMyThread::InitInstance()
{
	//因新建的类CMyWnd:public CFrameWnd的构造是protected的,在不改变权限情况下不能直接构造
	CRuntimeClass* pClass=RUNTIME_CLASS(CMyWnd);
	CObject* pObject=pClass->CreateObject();
	ASSERT(pObject->IsKindOf(RUNTIME_CLASS(CMyWnd)));//断言判断pObject类型
	CMyWnd* pFrameWnd=(CMyWnd*)pClass->CreateObject();//强转
	pFrameWnd->Create(NULL,"Thread window");
	pFrameWnd->ShowWindow(SW_SHOW);
	pFrameWnd->UpdateWindow();
	return TRUE;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

用户界面线程AfxBeginThread的使用

用户界面线程在运行时会有一个窗口界面和与其相对应的窗口函数,所以它可以通过响应消息来和用户进行交互。 AfxBeginThread 函数原型如下: CWinThread *AfxBegin...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)