none
关于多线程的问题 RRS feed

  • 问题

  • 用AfxBeginThread()函数申请了3个线程,线程函数都是内部带循环的,而且是有条件的。用VS2008建立的Win32控制台程序。现在的问题是,程序顺序执行一次控制台跳出的类似于DOS的界面就消失了,而且线程迅速也消失了。什么原因为什么只执行一次?请高人指点。

    以下是大致的代码

    Main.cpp

    UINT CommunicateWithSTEP5(LPVOID pParam);//to communicate with thePC

    UINT CodeExecute(LPVOID pParam);//execute the code from PC

    UINT S5Time(LPVOID pParam);//to time for S5 Timer

    void main()

    {

      AfxBeginThread(Communicate,(LPVOID) threadNO);//communicate with the PC


       AfxBeginThread(CodeExecute,(LPVOID) threadNO);//execute the code from PC

        
       AfxBeginThread(S5Time,(LPVOID) threadNO);//generate timer

    }

     UINT Communicate(LPVOID pParam)

     {

    //此处是具体的代码,使用了While循环,当然还调用了其它函数。

    }

     UINT CodeExecute(LPVOID pParam)

     {

    //此处是具体的代码,使用了While循环,当然还调用了其它函数。

    }

     UINT S5Time(LPVOID pParam)

     {

    //此处是具体的代码,使用了While循环,当然还调用了其它函数。

    }

    2010年11月26日 9:41

答案

全部回复

  • Hi,

    我想你应该在main方法结束前写一句代码读取控制台(DOS窗口)的输入, 这样主方法就不会退出了.


    Best regards,
    Ruiz


    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2010年11月29日 3:28
  • Ruiz:

       你好,我没看懂你的意思,不是控制台程序一般都是从Main函数开始的啊?能说具体点不?

    2010年11月29日 8:31
  • Ruiz:

           你好,我把自己的程序仔细看了一遍,发现其实自己对AfxBeginThread函数没有理解对,其实在Main里用它就像普通函数一样,既然程序按顺序执行,那么当三个线程创建完后,Main也就结束了,自然控制台程序自动退出了。而自己要实现的是三个线程创建后三个线程开始执行各自的函数,一般不退出程序,除非人为结束整个进程。看了VC,这样的应用应该用Window应用程序或者MFC程序。

          不过我现在在main()函数的末尾加上cin.get()可以暂时满足要求,即如果没有人为按下回车键,那么三个线程各自执行自己的函数。

         再次感谢你的关注!

    2010年11月30日 2:11
  • 你好!

        如果你在Main方法里没有做什么处理,控制台程序都是这样的,你双击一个控制台程序,Main函数结束以后,常须也就退出了,那个界面一闪,就退出了。在VS中,在不调试的情况下控制台才会一直显示。

        你可以在Main加上cin.get()就可以实现你要的效果了。

     


    周雪峰
    2010年12月1日 13:15
    版主
  • 你可以在Main加上cin.get()就可以实现你要的效果了。

    你只是用了三个函数作为主函数的执行体,当然执行完了,控制台窗口自然也就over了

    2010年12月6日 3:50