jiayushu 发表于 2010-8-17 09:49:17

关于任务中break的问题

以下面任务为例子。执行了break后。调度器怎么在调用该任务。能否直接执行socket(); 这个函数。 还是和回到上次切换的入口。
while(1)
{
    socket();
    bind();
    listen();
    while(1)
    {
      //非阻塞加入select(),阻塞方式直接调用accept();
      connectFd = accept( sockFd, (struct sockaddr *)&cltAddr, &len );
      //接下来看你是先收数据recv()还是先发数据send()
      while(1)
      {   //直接调用recv也是阻塞方式,要用非阻塞方式,必须加入到select()中
            recvNum = recv( connectFd, tcpBuf, 20, 0 );
            if ( recvNum <= 0 )
            {
               break;
            }
            sendNum = send( connectFd, tcpBuf, 20, 0 );
            OSTimeDly(100);
      }
      lwip_close(connectFd);//close()后直接返回到accept即可,不需要重新绑定与侦听
    }
}

jiayushu 发表于 2010-8-17 09:54:27

以RT-THREAD 系统为准。 上面任务仅是作为说明。

ffxz 发表于 2010-8-17 10:05:18

这个和应用相关,和OS无关:
break后执行close,然后继续等待accept。

eduhf_123 发表于 2010-8-17 10:52:36

C语言什么时候可以直接判断“<=”了?

jiayushu 发表于 2010-8-17 10:56:56

void task1(void)
{
    int a;
    a = 11;
    while(1)
    {
      a = 12;
      if(XXXX)
            break;
    }
}
这个执行break后,在怎么执行。 什么时间在执行这个任务

ffxz 发表于 2010-8-17 11:20:00

执行完break后,脱离循环

如果是RT-Thread:(针对实现的不同差异很大,这里仅适合RT-Thread)
线程退出后,线程自动销毁,如果是动态创建的线程,将自动释放线程控制块,线程栈内存。

这些在《RT-Thread编程指南》中都提到有的,请仔细看手册。

jiayushu 发表于 2010-8-17 11:26:36

那这样该任务就作废了,(不重新建立)永远得不到执行,对吗
页: [1]
查看完整版本: 关于任务中break的问题