使用CreateThread() vc 6.0 的多线程问题。。。。。。。。。。。 各位高手大哥帮帮小弟。。。。。。

编译的时候出现: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 *); 前面的下划线 只有一个 我复制到记事本上看了 你写的有两个下划线 并且 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;

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-16
你是在MFC的类里面定义吧?因为你是一个类的成员函数,所以是不行的,要把这个线程的过程函数定义为静态才可以,在声明前加上static就好了

使用CreateThread() vc 6.0 的多线程问题。。。 各位高手大哥帮帮小弟...
你的程序应该有问题,鉴于你没有把全部的程序贴出来 我只能分析一下你可能出错的地方 ULONG __stdcall CarRun(void *); 前面的下划线 只有一个 我复制到记事本上看了 你写的有两个下划线 并且 unsigned long _stdcall CardRun(void*) 的声明不能放在类里面 应该作为一个全局函数 ...

vc++6.0下窗口刷新问题
1.首先你应该把DlgConnect s传给多线程函数 如下:hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,pParam,//这里改为(void*)(&s)0,&ThreadID);2.在函数UINT ThreadFunc(LPVOID pParam)中 删除掉DlgConnect s;把s.DoModal();改为 (DlgConnect *)(pParm)->DoModal();

C++多线程函数CreateThread如何使用?
---第五个参数,传入与线程有关的一些标志,如果是CREATE_SUSPENDED,则创建一个挂起的线程,即这个线程本身已创建,它的堆栈也已创建。但这个线程不会被分配给CPU时间,只有当ResumeThread函数被调用后才能执行;当然,也可以调用SuspendThread函数再次挂起线程。要是标志为0,那么一旦建立线程,线程函数就被...

如何创建多线程CreateThread
include #include using namespace std; \/* HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId )...

多线程编程:[2]认识CreateThread函数
functionCreateThread( lpThreadAttributes: Pointer;    {安全设置} dwStackSize: DWORD;         {堆栈大小} lpStartAddress: TFNThreadStartRoutine;{入口函数} lpParameter: Pointer;      &#...

VC中MFC创建了多线程,界面怎么还会有卡死现象,但程序在正确执行(可以执 ...
主线程的Sleep时间太长了

C++中CreateThread创建线程, 线程函数return后算不算已经销毁了...
算。但是要释放线程资源,CreateThread返回的HANDLE还是要CloseHandle的 在线程结束之前也可以CloseHandle,不影响线程的继续执行。

MFC CreateThread 显示对话框
CreateThread(NULL,0,RecvThread, HView ,0,&dwThreadId);2. 在线程函数中通过句柄获取视图类指针,获取数据给视图类发送自定义消息:DWORD WINAPI RecvThread(LPVOID lpParam){ HWND HView = (HWND)lpParam;CWnd* pMyView = CWnd::FromHandle(HView);……pMyView ->SendMessage(WM_TASKDLG...

求按键精灵(VB)多线程实例
'这个是用于多线程访问临界资源同步Api的数据结构 Public Type CRITICAL_SECTION dummy As Long End Type '为什么用GDI 函数绘图?原因等下再讲 Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long Public Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, By...

比较成熟的C++多线程类库推荐?
没有那么复杂,也不需要类库 WINDOWS编程直接用CreateThread函数就可以 LINUX编程直接用pthread_create函数就可以 两个函数都有共同特点,就是只填写线程函数的名称,其他参数填0就行

相似回答