奇怪线程问题

leo_bin 2009-05-13 07:11:56
在一个窗口中启动一个线程监听串口,当串口收到东西时就响应自定义消息;现在遇到的问题是:如果通过手动点击按钮“Next”进入到子窗口中,该线程没有关闭;而通过自定义消息响应函数进入到子窗口中时,监听线程不工作了;但是在子窗口点击“Back”回到该窗口时,线程却依然能工作;为什么会有这样的区别呢?麻烦给讲解一下,呵呵。。。。。
在窗口的初始化函数中:
m_RS232.OpenPort(_T("COM5:"),9600 );
m_pThread=AfxBeginThread(CommProcParam, this, THREAD_PRIORITY_LOWEST,
0, CREATE_SUSPENDED, NULL);
线程函数:
UINT CommProcParam(LPVOID pParam)
{
.......
::SendMessage(pSerial->m_hWnd,WM_MYPARAM_MESSAGE,0,0);//发送消息
}

消息响应函数:
void CItemParam::OnUpDateparam()
{
do something......
OnBtnNext();//一个按钮事件的响应函数
}

void CItemParam::OnBtnNext()
{
do something......
CID id(this,L"",CID::TYPE_STRING,6,6);
if(IDCANCEL == id.DoModal()) return;//子窗口弹出
if(6 != id.m_string.GetLength()) return;
}

CID类的定义:
class CID : public CDialog
{
...............
CID(CWnd *pParent,LPCTSTR title,int inputType, float limitLow = NO_LIMIT_LOW ,float limitHigh = NO_LIMIT_HIGH); // standard constructor
}

...全文
87 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Seven_zhangxw 2009-05-16
  • 打赏
  • 举报
回复
顶一个先
xyj0663 2009-05-14
  • 打赏
  • 举报
回复
对话框模态的问题,
AlexChan1981 2009-05-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 91program 的回复:]
监听线程不工作了?不会吧,我猜是由于子窗体是模式对话框,影响了主窗体对自定义消息的处理,但是线程应该一直在后台运行。
[/Quote]

模式对话框有自己的消息队列,它无法接收来自主窗体的消息。
a445612838 2009-05-14
  • 打赏
  • 举报
回复
线程出现的问题,还真有些难,在下也在初学阶段,如果朋友你能对在下指点一二,鄙人感激不尽!!!
nick_TS16949 2009-05-14
  • 打赏
  • 举报
回复
线程是在工作,但是你的窗口应该接收不到线程发过来的消息,从而没有响应~
如果是模式对话框,你可以通过主窗口传递给子窗口!
fendou_mo 2009-05-13
  • 打赏
  • 举报
回复
线程的东西确实是蛮难的,学习中
huabinsir 2009-05-13
  • 打赏
  • 举报
回复
线程函数一般是全局或静态的.
儿大不由爷 2009-05-13
  • 打赏
  • 举报
回复
::PostMessage(pSerial->m_hWnd,WM_MYPARAM_MESSAGE,0,0);
应该就不会有问题了
SendMessage要等到消息处理完才返回
91program 2009-05-13
  • 打赏
  • 举报
回复
监听线程不工作了?不会吧,我猜是由于子窗体是模式对话框,影响了主窗体对自定义消息的处理,但是线程应该一直在后台运行。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧