我初学VC,编写一个程序同时读两个串口,我想让这两个线程同时开始,并行发展,应该没有共享的东西阿,但是一启动就崩溃。是要用同步吗,或者waitforsingleobject。 CView::OnStart()
{
pThreadA = AfxBeginThread(ThreadFuncA,...);
pThreadB = AfxBeginThread(ThreadFuncB,...);
}
UINT ThreadFuncA(LPVOID pParam)
{
while(fStop) //循环读串口1
{...}
}
UINT ThreadFuncB(LPVOID pParam)
{
while(fStop) //循环读串口2
{...}
}
{
pThreadA = AfxBeginThread(ThreadFuncA,...);
pThreadB = AfxBeginThread(ThreadFuncB,...);
}
UINT ThreadFuncA(LPVOID pParam)
{
while(fStop) //循环读串口1
{...}
}
UINT ThreadFuncB(LPVOID pParam)
{
while(fStop) //循环读串口2
{...}
}
如果一个线程步崩溃,而两个会,你查查两个线程是否同时操作了某个全局变量没有?很有可能是某个线程造成了指针悬空之类的错误。还有,如果你只有一个CPU,你的两个线程不会真正的并行同步。
或着直接使用。我一直使用这个类。挺好用的。
//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;
}
URL http://www.codestudy.net/book/download.asp?id=380&sort=1