建立的语句:
void CClientDlg::OnBtsendcmd()             
....
....
m_pThread = AfxBeginThread(
ThreadProc,
(LPVOID) pParam,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED,
NULL);
....
线程函数:
UINT CClientDlg::ThreadProc( LPVOID pParam )编译时的错误信息:G:\0dayz\client\clientDlg.cpp(374) : error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'请问如何解决???谢谢。。

解决方案 »

  1.   

    在头文件中定义为:
    static UINT ThreadProc( LPVOID pParam );
      

  2.   

    static UINT CClientDlg::ThreadProc( LPVOID pParam )或定义成全局函数
    UINT ThreadProc(LPVOID pParam)
      

  3.   

    这么定义算不算全局函数? 我的问题基本上和此贴一样 就在附近 各位帮忙一起看看好了
    class CMainDlg : public CDialog
    {
    public:
    UINT SendWorker(LPVOID pParam);
             ...
      

  4.   

    你定义在类里面了怎么能算全局-_-;
    加上static或者把函数放到类外面来。
      

  5.   

    改成static,又会出其他的问题。我把我的整个程序大概说一下,
    主线程1是通信程序,接收对方的信息后,开一个子线程2,将信息写入文件。1                       2
    ...                 create(suspend)
    ...                     |
    recv.                   |
    resumethread            |
    recv                   write
    recv                   write
    recv                   write所以主线程需要传递文件名,文件长度给子线程。
    然后主线程继续收,子线程继续写,(因为文件一次传不完)
    主线程在这个过程中是把cBuf一次一次送到环形队列BUF,
    子线程从BUF一次一次取,然后写。改成static好像就不能从BUF取了,似乎
      

  6.   

    定义成全局函数后新县城怎么调用主线程里定义的函数 class CMainDlg : public CDialog
    {
    public:
          ....
    该传一个什么指针进去
      

  7.   

    线程函数一定是全局的,定义为static就说明是全局的,变量一直保存。可以将主线程的类传进出。
    创建线程:
    DWORD dwThread;
    HANDLE hThread;
    hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ComThreadFunc, this, 0, &dwThread);
    CloseHandle(hThread);线程:
    DWORD ComThreadFunc(LPVOID pvVoid)
    {
    CMainDlg *sss=(CMainDlg *)pvVoid;
    .....
    }
      

  8.   

    我正准备问这个问题
    看来很具有代表性
    头文件的定义:DWORD WINAPI ComputeThreadProc(LPVOID *pParam);线程函数:
    DWORD WINAPI ComputeThreadProc(LPVOID *pParam)
    {
    while(1){}
    return 0;}
    创建线程:
    CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ComputeThreadProc,(void *)this,0,&idThread);
    错误:
     error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
            None of the functions with this name in scope match the target type
    大伙的意思是不是在头文件定义的前面加一个static
      

  9.   

    必须声明成全局函数,它不能是某个类中的函数
    class CMainDlg : public CDialog
    {
    public:
    UINT SendWorker(LPVOID pParam);
             ...
    这样这个函数还是CMainDlg类的成员函数
    你应该写成这样
    class CMainDlg : public CDialog
    {
    public:
             ...
    }
    UINT SendWorker(LPVOID pParam);
      

  10.   

    new一片内存,赋值,传入线程,在线程内用static_cast转回来。
      

  11.   

    必须是STATIC或全局函数如果还是出错,那就只可能是楼主,参数(线程函数的参数)传递或者程序的其他部分有错了