使用CreateThread() vc 6.0 的多线程问题。。。。。。。。。。。 各位高手大哥帮帮小弟。。。。。。
编译的时候出现:CreateThread':cannotconvertparameter3from'unsignedlong(void*)'to'unsignedlong...
编译的时候出现:CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'。。。
我的函数声明如下:
ULONG __stdcall CarRun(void *);
BOOL CarthreadRun(CDC * pDC)////我是在这个函数里面使用多线程的
{ CreateThread(NULL,0,CarRun,(void *)0,0,NULL);
return true; }
但是在编译的时候出现了:'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
None of the functions with this name in scope match the target type。。。。。但是我百度上看了其他人很多关于CreateThread()的用法,我就是按他们做到。。可是为什么会这样啊。。。。。。。。。。。。。。小弟求助。。。。。。。。。。。。
对不起。。。。。。。因为我全是问题。。。。我是菜鸟,很多东西都不懂。我自己也没有分。。。。。。。。。。。但是还是求求大哥些帮帮忙。。。 展开
我的函数声明如下:
ULONG __stdcall CarRun(void *);
BOOL CarthreadRun(CDC * pDC)////我是在这个函数里面使用多线程的
{ CreateThread(NULL,0,CarRun,(void *)0,0,NULL);
return true; }
但是在编译的时候出现了:'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
None of the functions with this name in scope match the target type。。。。。但是我百度上看了其他人很多关于CreateThread()的用法,我就是按他们做到。。可是为什么会这样啊。。。。。。。。。。。。。。小弟求助。。。。。。。。。。。。
对不起。。。。。。。因为我全是问题。。。。我是菜鸟,很多东西都不懂。我自己也没有分。。。。。。。。。。。但是还是求求大哥些帮帮忙。。。 展开
2个回答
展开全部
你的程序应该有问题,鉴于你没有把全部的程序贴出来 我只能分析一下你可能出错的地方
ULONG __stdcall CarRun(void *); 前面的下划线 只有一个 我复制到记事本上看了 你写的有两个下划线 并且 unsigned long _stdcall CardRun(void*) 的声明不能放在类里面 应该作为一个全局函数 放到类的外面才可以
我已经给试过了 具体程序如下
//.h文件
DWORD _stdcall CarRun(void*);
class CKJScrDispDlg : public CDialog
{ 。。。。。。。。。。。。。
。。。。。。。。。
}
//cpp文件
BOOL CKJScrDispDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
CreateThread(NULL,0,CarRun,this,0,NULL);
return TRUE; // return TRUE unless you set the focus to a control
}
DWORD _stdcall CarRun(void *)
{
return 0;
}
ULONG __stdcall CarRun(void *); 前面的下划线 只有一个 我复制到记事本上看了 你写的有两个下划线 并且 unsigned long _stdcall CardRun(void*) 的声明不能放在类里面 应该作为一个全局函数 放到类的外面才可以
我已经给试过了 具体程序如下
//.h文件
DWORD _stdcall CarRun(void*);
class CKJScrDispDlg : public CDialog
{ 。。。。。。。。。。。。。
。。。。。。。。。
}
//cpp文件
BOOL CKJScrDispDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
CreateThread(NULL,0,CarRun,this,0,NULL);
return TRUE; // return TRUE unless you set the focus to a control
}
DWORD _stdcall CarRun(void *)
{
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询