QT异步函数和同步函数交换问题

  同步函数与异步函数

:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所要做的事情全都做完了才返回。

强:如果一个异步函数被调用时,该函数会立即返回尽管该函数规定的操作任务还没有完成。





,,,,,,, 回调方式很简单:如果把异步函数包装进一个对象中,可以用事件取代回调函数地址,通过事件处理例程向调用方发通知。
,事件是Windows系统提供的一个常用同步对象,以在异步处理中对齐不同线程之间的步点。如果调用方暂时无事可做,可以调用等函数等在那里,此事件时处于nonsignaled状态。当被调方出来结果之后,把事件对象置于暗示状态,等待函数便自动结束等待,使调用方重新动作起来,从被调方取出处理结果。这种方式比回调方式要复杂一些,速度也相对较慢,但有很大的灵活性,可以搞出很多花样以适应比较复杂的处理系统。

借助Windows消息发通知是个不错的选择,既简单又安全。程序中定义一个用户消息,并由调用方准备好消息处理例程。被调方出来结果之后立即向调用方发送此消息,并通过按钮和LParam这两个参数传送结果。消息总是与窗口处理关联,因此调用方必须借助一个窗口才能接收消息,这是其不方便之处。另外,通过消息联络会影响速度,需要高速处理时回调方式更有优势。


,

,是指,你拨通某人的电话,但是此人不在,于是你拿着电话等他回来,其间不能再用电话。

, 是指,你拨通某人的电话,但是此人不在,于是你挂断电话,待会儿再打。至于到时候他回来没有,只有打了电话才知道,即所谓的“轮询/调查”。

,所以这个时候的所有请求将会在服务端得到同步

,

<强>


/*, create 从而connection  by  socket 
  *,means  that  connect “sockfd”,用“server_addr”
  *,同步阻塞模式,
  */if (连接(sockfd, (struct  sockaddr  *), server_addr,, sizeof (struct  sockaddr)),==, 1)
  {
  perror(“连接”);
  退出(1);
  }/*,同步非阻塞模式,*/while (发送(sockfd, snd_buf,, sizeof (snd_buf), MSG_DONTWAIT),==, 1)
  {
  睡眠(1);
  printf(“睡眠\ n”);
  }

,

<强>


QT异步函数和同步函数交换问题