同步函数与异步函数
强>:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所要做的事情全都做完了才返回。
>强:如果一个异步函数被调用时,该函数会立即返回尽管该函数规定的操作任务还没有完成。
强>
,,,,,,, 强>回调方式很简单:如果把异步函数包装进一个对象中,可以用事件取代回调函数地址,通过事件处理例程向调用方发通知。
,事件是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”); }
,
<强> 强>