我初学VC,编写一个程序同时读两个串口,我想让这两个线程同时开始,并行发展,应该没有共享的东西阿,但是一启动就崩溃。是要用同步吗,或者waitforsingleobject。 CView::OnStart()
{
  pThreadA = AfxBeginThread(ThreadFuncA,...);
  pThreadB = AfxBeginThread(ThreadFuncB,...);
}
UINT ThreadFuncA(LPVOID pParam)
{
 while(fStop)   //循环读串口1
  {...}
}
UINT ThreadFuncB(LPVOID pParam)
{
 while(fStop)   //循环读串口2
  {...}
}

解决方案 »

  1.   

    如果谁有Windows 多线程编程的电子版共享,更是不甚感激!
      

  2.   

    如果单一个线程运行会崩溃吗?
    如果一个线程步崩溃,而两个会,你查查两个线程是否同时操作了某个全局变量没有?很有可能是某个线程造成了指针悬空之类的错误。还有,如果你只有一个CPU,你的两个线程不会真正的并行同步。
      

  3.   

    串口操作的东西,建议你去下个CSerialPort类看看。
    或着直接使用。我一直使用这个类。挺好用的。
      

  4.   

    // Nov25oe1View.cpp : implementation of the CNov25oe1View class
    //inlude header files ..../////////////////////////////////////////////////////////////////////////////
    // CNov25oe1View construction/destruction
    char gpsPort[5] = "COM6";
    long gpsSpeed = 4800;
    CSpectrometer* Spectrometer = new CSpectrometer; 
    CGPS *gps = new CGPS(gpsPort,gpsSpeed);
    CNov25oe1View::CNov25oe1View()
    {}CNov25oe1View::~CNov25oe1View()
    {}
    // CNov25oe1View message handlersvoid CNov25oe1View::OnControlStart() 
    { pSpecThread=AfxBeginThread(CollectSpectra,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);
    pGPSThread = AfxBeginThread(GetGPSData1,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);}
    //-----------------------------------------------------------------
    UINT CollectSpectra(LPVOID pParam)
    {

    Spectrometer->Run(TRUE);
    return 0;
    }
    UINT GetGPSData1(LPVOID pParam)
    {

    gps->Run(TRUE);

    return 0;
    }
      

  5.   

    Windows网络编程:
    URL http://www.codestudy.net/book/download.asp?id=380&sort=1
      

  6.   

    绝对同步?除非你有2个CPU。而且就算有2个CPU,那么也要开启线程(thread)的那个进程(process)同时执行启动线程的函数,而同时启动函数又是一个同步问题,以此类推,是一个无解的问题。不过你可以尝试一下让2个线程在某一时刻同时启动的方案,具体使用Windows的哪个函数看看MSDN。