vsmfc怎么添加工作线程
⑴ MFC中怎么创建多个线程,代码添加在哪
1)从CWinThread的派抄生类如:CUserThread;
注意:需要将变量的地址传给派生类的线程对象访问。
2)创建新的用户线程
CUserThread* pThread=new CUserThread();
pThread->CreateThread();
⑵ MFC单文档怎么添加线程
线程简单来说就是一个函数,添加一个静态的全局函数DWORD WINAPI ThreadProc( void *pData ) ,这个函数只有一个版参数,可以转换为你想权要的类型。
然后在启用线程的地方添加 CreateThread( NULL, 0, ThreadProc, this, 0, NULL );
该线程函数完成后,自动退出。
⑶ MFC中怎样创建线程
使用AfxBeginThread函数
⑷ mfc 怎么新建线程 新建一个线程,并让线程执行一段for循环的操作, 要具体代码
#include <windows.h>
#include <stdio.h>
int loopproc(int times){
for(;times>0;times--){
printf("hello world\n");
}
}
int main(int argc,char** argv){
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)loopproc,(void*)50,0,NULL);
getchar();
return 0;
}
MFC里原理相同没任何区专别。属
⑸ 新手求教,MFC里UI线程和工作线程的创建和参
1.用AfxBeginThread创建的线程结束时,不必调用什么函数,只要return 就可以了,主线程回可以通过消息或答事件(推荐)来结束线程。如下:
HANDLE hStop;
UINT TestThread(LPVOID)
{
while(true)
{
DWORD ret=WaitForSingleObject(hStop,0);
if (ret==WAIT_OBJECT_0) //有停止事件
{
break;
}
//do somthing...
}
return 0L;
}
CTestView::OnAAAClick()
{
hStop=CreateEvent(NULL,FALSE,FALSE,NULL);
AfxBeginThread(TestThread,NULL); //开始线程
}
CTestView::OnBBBClick()
{
SetEvent(hStop); //结束线程
CloseHandle(hStop);
}
⑹ MFC中如何创建一个线程
//放在需要创建线程的地方,如主程序
//保存线程的ID。
DWORD dwThreadID = 0;
HANDLE hThread=CreateThread(NULL,0,DownloadThread,0,NULL,&dwThreadID);//创建专下载线程
//全局函数属
static DWORD WINAPI DownloadThread(void *pArg)
{
//这里写上创建线程做什么的函数
return 0;
}
////////////等待线程结束
//等待线程结束。
DWORD dRet;
MSG msg;
while (1)
{
dRet=::MsgWaitForMultipleObjects(1,&hThread,FALSE,INFINITE,QS_ALLINPUT);
if (dRet == WAIT_OBJECT_0+1)
{
while (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
break;
}
}
//删除的线程资源。
CloseHandle(hThread);
⑺ 求高手写个MFC最简单的对话框中加个工作线程的小程序
MFC中开线程确实是个麻烦的问题,最大的问题在于开出来的线程函数不能直接使用MFC的一些机制,比如一个基于对话框工程,dlg cpp中写了一个线程函数,那么这个函数不能使用当前dlg类的所有成员,函数,所以直接调用控件变量是不行的,另外获取指针的方法也不行,只有在MFC类的成员函数中才能使用GetDlgItem( IDC_EDIT1 ),在其他函数中只能使用HWND GetDlgItem(HWND hDlg,int nIDDlgItem),使用后GetDlgItem( NULL,IDC_EDIT1 )->只弹出一个unused
当然办法还是有的,思路是先全局定义一些变量,在工作者线程中去不断改变变量的值,把变量值反馈给对话框的任务交给OnTimer(),因为你的要求是自动刷新,那么也就是每隔一定时间刷新,那么OnTimer()就必不可少了。
我给你个例子,要写的代码非常少就不发工程了,步骤如下
建一个基于对话框工程,添加一个按钮,一个editbox,editbox绑定一个control变量c_edit
然后在oninitdialog中加int iInstallResult;
iInstallResult=SetTimer(1,1,NULL);
同样是这个cpp文件中的开头加int num=0;(全局)
再在全局位置添加线程函数
UINT fun(LPVOID pParam)
{
while(1)
{
++num;
if(num>=1000) num=0;
}
return 0;
}
为按钮添加单击事件,加入代码AfxBeginThread(fun,NULL);
最后为对话框添加OnTimer事件,代码如下
CString s;
s.Format(_T("%d"),num);
c_edit.SetWindowTextW(s);
CDialog::OnTimer(nIDEvent);
这个程序运行后OnTimer就已经启动,会不断把num值写入editbox,点击按钮后,fun线程启动,不断累加num,直到1000时归零,也就是editbox不断在0-1000之间滚动
其实想想工作者线程中也并不需要MFC机制,能处理一些数据就可以了,标准cc++的库还是可以正常使用的,当然至于不能使用MFC的机制估计很有可能是我没发现用法,比如获取指针那里虽然只弹出一个unused,但是毕竟有这个函数有它的作用的,只不过我不知道用法而已,另外发送消息机制我是实在不会,也不知道能不能正常使用,不过不出意外估计也是不能直接拿来用的,不像mfc那么方便
这是开线程的一种思路,我也不知道一般软件开发这种情况是用的什么技术,至于怎么在线程中使用MFC机制,就看你有没有这个兴趣往那个方向去研究了
⑻ mfc中如何创建线程
static UINT ThreadFunc(LPVOID pParam);//线程函数声明
UINT CTestApp::ThreadFunc(LPVOID pParam)
{
//线程函数实现
}
CWinThread *m_pThread; //线程指针
m_pThread = AfxBeginThread(ThreadFunc, NULL); //启动线内程
就可以了容
⑼ VC++,MFC怎么创建一个线程,然后详细如下
在主程序里用抄CreateThread创建好线程,然后线程里Sleep(500)也就是0.5秒,最后就读一次队列的第一个元素就好了。队列可以用vector、list或者单纯的CStringArray来做即可。
看你的问题,觉得实现起来不困难,不知道你卡在哪里了?