问题一:怎样才能把一个要执行的函数放在一个新的线程中,详细些?
问题二:怎样使用定时器,最好具体些?小弟有急用,多谢了!!!!!!!!!!!!!11

解决方案 »

  1.   

    AfxBeginThread函数可以创建一个线程,并且执行这样的一个函数:UINT xxxx(void * pParam);AfxBeginThread有两个参数一个是上面函数的地址,一个是pParam,AfxBeginThread创建线程成功后,就用pParam参数调用xxxx。你要执行的函数如果参数不是void *,可以让xxxx调用。定时器:用CWnd::SetTimer创建,响应WM_TIMER消息就可以。
      

  2.   

    定时器:
        先用 ClassWizard 在你要使用定时器的类中创建消息 WM_TIMER 的消息处理函数。然后再合适的地方用函数 CWnd::SetTimer()(也可以用 Api 的SetTimer) 安装定时器。
    nTimerID = SetTimer(1, 1000,NULL);
    在 WM_TIMER 的消息处理函数中假如你的代码。别忘了最后用 KillTimer 多线程相对啰嗦点AfxBeginThread(DialThread,this);   
    // 开始一个新线程,DialThread 为线程控制函数,在头文件定义如下:
    static UINT DialThread(LPVOID pvThread); 随后在线程控制函数中如此这般,调用线程实现函数 _Dial()UINT CRasThread::DialThread(LPVOID pvThread)
    { // Ï߳̿ØÖƺ¯Êý
    CRasThread *pThread = (CRasThread*) pvThread;
    if(pThread == NULL) return 0;
    pThread -> _Dial();
    return TRUE;
    }_Dial() 在头文件中定义如下: BOOL _Dial();随后在_Dial()中假如你的代码就可以了BOOL CRasThread::_Dial()
    {
    BOOL blRet......return blRet
    }
      

  3.   

    有乱码,重发:
    UINT CRasThread::DialThread(LPVOID pvThread)
    {
             CRasThread *pThread = (CRasThread*) pvThread;
    if(pThread == NULL) return 0;
    pThread -> _Dial();
    return TRUE;
    }_Dial() 在头文件中定义如下: BOOL _Dial();随后在_Dial()中假如你的代码就可以了BOOL CRasThread::_Dial()
    {
    BOOL blRet......return blRet
    }
      

  4.   

    多线程中的定时器应该是这个Waitable Timer
        HANDLE hTimer = NULL;
        LARGE_INTEGER liDueTime;    liDueTime.QuadPart=-100000000;    // Create a waitable timer.
        hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer");
        if (!hTimer)
        {
            printf("CreateWaitableTimer failed (%d)\n", GetLastError());
            return 1;
        }    printf("Waiting for 10 seconds...\n");    // Set a timer to wait for 10 seconds.
        if (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0))
        {
            printf("SetWaitableTimer failed (%d)\n", GetLastError());
            return 2;
        }    // Wait for the timer.    if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
            printf("WaitForSingleObject failed (%d)\n", GetLastError());
        else printf("Timer was signaled.\n");
      

  5.   

    顺便问一下,多线程这些我已经实现,可是参数传递我有些不会,它不象自定义函数那样可以随意定义函数参数,怎样利用pParam传递有关参数,我每次都是定义全局变量什么的,自己都用着别扭,最好哪位能举一个简单的例子,谢谢
      

  6.   

    pParam是一个void *,可以指向任何合法的变量或者实例,但是要注意的是,如果pParam指向一个线程创建者的自动变量,这个变量会在创建者线程中被释放,而新线程无法知道pParam指向的变量何时已经被删除。所以pParam最好指向new或者malloc分配得实例,不过新线程用完之后必须记得删除。