因为在AfxBeginThread中的线程执行函数里所用到的变量和函数都必须是全局或者是静态的,我不想这样用,请问各位高手是不是可以不用这个函数,而直接用SetEvent来触发另一个线程的启动。

解决方案 »

  1.   

    ...AfxBeginThread中的线程执行函数里所用到的变量和函数都必须是全局或者是静态
    为什么?
    class A
    {
    };
    main()
    {
       A a
       AfxBeginThread(run,&a) 
    }
    UINT run(void* p)
    {
      A* pa = (A*)p;
      //you can use a of the main()!
    }
      

  2.   

    方法一样class A
    {
       static int threadrun(void* p);
       void Run(); //u want to call
    };main()
    {
       A a
       AfxBeginThread(A::threadrun,&a) 
    }UINT A::thread(void* p)
    {
      A* pa = (A*)p;
      pa->Run(); //that's ok
    }
      

  3.   

    直接用WindowsAPI的CreateThread函数
    HANDLE CreateThread(
      LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
      DWORD dwStackSize,                        // initial stack size
      LPTHREAD_START_ROUTINE lpStartAddress,    // thread function
      LPVOID lpParameter,                       // thread argument
      DWORD dwCreationFlags,                    // creation option
      LPDWORD lpThreadId                        // thread identifier
    );