程序挂掉了,求⑨

wori011 2011-10-11 02:54:26
上端下发一条上报数据的指令,我必须不停给他上报数据(循环发送),几乎没有间歇
如果此时他下发一条停止上报数据的指令 我的程序就不能给他任何反应、当然此时的情况类似于我的程序只能不能的上报数据了,停不下来。
各位大大 能不能给我一个比较好的解决这个问题的建议
...全文
77 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-10-11
  • 打赏
  • 举报
回复
上下行各使用一个线程。
两个线程之间共享全局变量,访问该全局变量前后要加锁和解锁。
yakeezhao 2011-10-11
  • 打赏
  • 举报
回复
大致一个流程如下:




mainthread
{

while(getting instruction received)
{
switch(instruction)
{
case startuploading:
if(workthread does not exist)
{
create workthread;
start workthread;
post message to workthread;
}
break;
....
case stopuploading:
{
post message to workthread;
}
break;
....
}
}

quit_mainthread()
{
post message to workthread;
cleanwork
}
}

workthread
{

while(getting instruction from mainthread)
{
switch(instruction)
{
case startuploading:
uploadingdata();
...
break;
....
case stopuploading:
stopuploadingdata();
...
break;
....
case quitworkthread:
stopuploadingdata();
...
break;
}
}

uploadingdata()
{
working...
if(stop_uploadingdata is true)
{
return;
}
working...
}

stopuploadingdata()
{
set stop_uploadingdata to be true
....
}

}
chengwenyao18 2011-10-11
  • 打赏
  • 举报
回复
楼上正解。。。
yakeezhao 2011-10-11
  • 打赏
  • 举报
回复
不是。是只新开一个子线程,这个子线程一直运行,专门用来上报数据,主线程接收指令。一旦收到指令,主线程向子线程发送一条命令,子线程开始工作。如果没有指令来,子线程的本次工作有结束了,那么子线程阻住等待。子线程在每次工作时,要不断查询某个状态(比如退出命令)。
wori011 2011-10-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yakeezhao 的回复:]
要不把处理上报数据的代码移到另一个线程里去吧。也就是说,接收指令和上报数据分别在两个线程里处理
[/Quote]

要上报数据的时候 开启新线程? 不需要的时候 直接挂起么、
yakeezhao 2011-10-11
  • 打赏
  • 举报
回复
要不把处理上报数据的代码移到另一个线程里去吧。也就是说,接收指令和上报数据分别在两个线程里处理

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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