void CProgressBarDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
int *x;
AfxBeginThread(P1,this);
}
void P1()
{
CProgressBarDlg *pDLG=(CProgressBarDlg *)(AfxGetApp()->GetMainWnd());
//Progress为一进度条
pDLG->Progress.SetStep(1);
pDLG->Progress.SetPos(100);
for (int i=100;i>=0;i--)
{
pDLG->Progress.SetPos(i);
Sleep(100);
}
}
另外,
AfxBeginThread(P1,this);
改为
AfxBeginThread(P1,NULL);
也不行。
我用的是Visual Studio 2008,编译时错误提示:
1>d:\我的文档\visual studio 2008\projects\progressbar\progressbar\progressbardlg.cpp(166) : error C2665: “AfxBeginThread”: 2 个重载中没有一个可以转换所有参数类型
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(4535): 可能是“CWinThread *AfxBeginThread(AFX_THREADPROC,LPVOID,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)”
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(4538): 或 “CWinThread *AfxBeginThread(CRuntimeClass *,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)”
1> 试图匹配参数列表“(void (__cdecl *)(void), LPVOID)”时
6 个解决方案
#1
P1函数与AfxBeginThread的要求不符。
UINT P1(LPVOID pParam)
{
return 0;
}
UINT P1(LPVOID pParam)
{
return 0;
}
#2
谢谢!解决了。
那么如果要将参数int x带入线程函数应该怎样做呢?比如我想在线程中sleep(x);?
那么如果要将参数int x带入线程函数应该怎样做呢?比如我想在线程中sleep(x);?
#3
强制类型转换就可以:
AfxBeginThread(P1, (PVOID)(INT_PTR)i);
UINT P1(LPVOID pParam)
{
Sleep(DWORD(DWORD_PTR)pParam);
return 0;
}
AfxBeginThread(P1, (PVOID)(INT_PTR)i);
UINT P1(LPVOID pParam)
{
Sleep(DWORD(DWORD_PTR)pParam);
return 0;
}
#4
谢谢!完全解决了。
#5
解决了?你只解决了编译错误吧?窗口不能跨线程使用,你在P1里使用对话框主窗口是错误的
#6
事实上程序是正确的运行了。主窗体上的进度条确实是按照原先的设想在动。我的窗体上一共有3个进度条,现在启动三个进程,可以以三个不同的速度滚动。
#1
P1函数与AfxBeginThread的要求不符。
UINT P1(LPVOID pParam)
{
return 0;
}
UINT P1(LPVOID pParam)
{
return 0;
}
#2
谢谢!解决了。
那么如果要将参数int x带入线程函数应该怎样做呢?比如我想在线程中sleep(x);?
那么如果要将参数int x带入线程函数应该怎样做呢?比如我想在线程中sleep(x);?
#3
强制类型转换就可以:
AfxBeginThread(P1, (PVOID)(INT_PTR)i);
UINT P1(LPVOID pParam)
{
Sleep(DWORD(DWORD_PTR)pParam);
return 0;
}
AfxBeginThread(P1, (PVOID)(INT_PTR)i);
UINT P1(LPVOID pParam)
{
Sleep(DWORD(DWORD_PTR)pParam);
return 0;
}
#4
谢谢!完全解决了。
#5
解决了?你只解决了编译错误吧?窗口不能跨线程使用,你在P1里使用对话框主窗口是错误的
#6
事实上程序是正确的运行了。主窗体上的进度条确实是按照原先的设想在动。我的窗体上一共有3个进度条,现在启动三个进程,可以以三个不同的速度滚动。