我在用 VC6.0 编写一个多线程的程序,其中主线程是对话框中的线程,一个工作线程用来从串口上读取数据
1. 在主线程(对话框中),利用类向导生成了一个 CMSComm 类的成员函数m_msComm,然后在主线程中对m_msComm 进行的端口号、波特率等进行设置,之后利用 SetPortOpen()函数来打开串口,并启动工作线程 “ThreadProcessReadLableByComm” 并将主对话框类以参数的形式发送给工作线程。
2. 在工作线程中(“ThreadProcessReadLableByComm”),将参数还原为“主对话框类”同时赋值给本地的定义变量pManager,之后利用 pManager-> m_msComm.GetInput() 来读取串口数据。////////--------------TempTestReadIDByComm 线程中的程序------------------
UINT CKJBigScreenDlg::ThreadProcessReadLableByComm(LPVOID pVoid)
{
CKJBigScreenDlg *pManager; //定义指向主对话框类的指针
int iLoopTimer = 50; //定义循环时间间隔
pManager = (CKJBigScreenDlg *)pVoid; //将传递来的参数变为指向主对话框的指针 while(true) //主对话
{
....
VARIANT var;
var = pManager ->m_msComm.GetInput(); //通过指向主对话框的指针来访问 “CMSComm”控件的类
....
}
////////////////////------------------------------------------------
在实际运行过程中,每隔几天,程序就出错问题,请问这是不是由于CMSComm 不同步引起的?
如果是因为CMSomm 的问题,那我如何在工作线程如何处理?
另外能否在工作线程中直接创建一个 CMSComm 的一个实例,如果可以如何创建,请给出一些代码?(不好意思,小弟已经不分了,请大家原谅,另外也请高手指点)
1. 在主线程(对话框中),利用类向导生成了一个 CMSComm 类的成员函数m_msComm,然后在主线程中对m_msComm 进行的端口号、波特率等进行设置,之后利用 SetPortOpen()函数来打开串口,并启动工作线程 “ThreadProcessReadLableByComm” 并将主对话框类以参数的形式发送给工作线程。
2. 在工作线程中(“ThreadProcessReadLableByComm”),将参数还原为“主对话框类”同时赋值给本地的定义变量pManager,之后利用 pManager-> m_msComm.GetInput() 来读取串口数据。////////--------------TempTestReadIDByComm 线程中的程序------------------
UINT CKJBigScreenDlg::ThreadProcessReadLableByComm(LPVOID pVoid)
{
CKJBigScreenDlg *pManager; //定义指向主对话框类的指针
int iLoopTimer = 50; //定义循环时间间隔
pManager = (CKJBigScreenDlg *)pVoid; //将传递来的参数变为指向主对话框的指针 while(true) //主对话
{
....
VARIANT var;
var = pManager ->m_msComm.GetInput(); //通过指向主对话框的指针来访问 “CMSComm”控件的类
....
}
////////////////////------------------------------------------------
在实际运行过程中,每隔几天,程序就出错问题,请问这是不是由于CMSComm 不同步引起的?
如果是因为CMSomm 的问题,那我如何在工作线程如何处理?
另外能否在工作线程中直接创建一个 CMSComm 的一个实例,如果可以如何创建,请给出一些代码?(不好意思,小弟已经不分了,请大家原谅,另外也请高手指点)
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货