生成线程的程序能放到类里去定义吗?
以下是模拟的代码:
Dword CAlarm::Excution(LPDWORD param) //线程的执行函数
{
if (nRunning)
{
   
  Beep(450, 150);
}
return 1;
}BOOL  Calarm::StartThread()    //创建线程
{
HANDLE hThread;
HThread = CreateTread(0, 0, 
                    (LPTHREAD_START_ROUTINE)Excution,
                    0, 0, &id);
}在编译时通不过,提示找不到Excution函数。据说可以在Dword CAlarm::Excution(LPDWORD param)加上static让其成为静态函数,我试过了,也是不行的。请大侠指点一二!

解决方案 »

  1.   

    类的静态成员函数是可以作为线程函数,不用怀疑这一点。
    把加了static之后的出错信息贴出来。
      

  2.   

    这个问题被问了无数次了。
    http://expert.csdn.net/Expert/TopicView1.asp?id=1376518
      

  3.   

    http://expert.csdn.net/Expert/TopicView1.asp?id=1357763
      

  4.   

    多谢各位的解答,但是我还有以下的疑问:问题1:我在类的定义中如下定义:
    class CAlarm
    {
    public:
    static Dword Execution(LPDWORD param) //线程的执行函数
    ....
    };
    及实现函数中这样定义:static Dword CAlarm::Execution(LPDWORD param) 
    {
    ...
    }
     
    编译时提示:error C2724: 'Execution' : 'static' should not be used on member functions defined at file scope问题2:
    如果如下定义:
    class CAlarm
    {
    public:
    static Dword Execution(LPDWORD param) //线程的执行函数
    ....
    };
    及实现函数中这样定义:Dword CAlarm::Execution(LPDWORD param) //注意,这里没加static!
    {
    CAlarm * This = (CAlarm *) param;
    if(This == NULL)
    {
    return 0;
    }
    else
    {
    ...
    }
    }那么编译都没问题,但是每次执行时,This总是等于NULL,这是为何?
      

  5.   

    Q:" This总是等于NULL,这是为何?"A: 你没把类实例的this指针传给线程。BOOL  Calarm::StartThread()    //创建线程
    {
    HANDLE hThread;
    HThread = CreateTread(0, 0, 
                        (LPTHREAD_START_ROUTINE)Excution,
                        this, 0, &id); //注意第四个参数,用了this指针
    }
      

  6.   

    HThread = CreateTread(0, 0, 
                        (LPTHREAD_START_ROUTINE)Excution,
                        0, 0, &id);
    change to :
    HThread = CreateTread(0, 0, 
                        (LPTHREAD_START_ROUTINE)Excution,
                        this, 0, &id);
    try it again;
      

  7.   

    用CreateThread生成线程 线程函数最好加 WINAPI
    修饰万一改变编译设定才不会出错!