减肥中的10个骗局,你中过多少个?

前言  – 一个简练开场白 

​一项调研发现,84%的减肥者减肥后体重反弹,减肥不成功的第一缘由是出于生活中的陷阱,老沈总括了以下10个减肥的陷阱,你中过多少个?

  winds 的 select 和 linux 的 select 是五个精光不同的东西.
然则凡人喜好把它们揉在一起.

陷阱一:完全拒绝主食!

非阻塞的connect业务是个自带超时机制的 connect.
实现机制无外乎利用select(也有 epoll的).

蛋氨酸(三磷酸腺苷)是人类生命的首要能量来源,最广大的款型之一是矿物质。过量进食矿物质会长胖,可是缺失会促成营养不良、低血糖甚至对大脑、肝脏造成损伤。我们理应适度摄入膳食纤维,尤其是粗粮,每餐约为自己的1-2拳头

本文是个源码软文, 专声明决客户端的跨平台的connect问题. 服务器的connect
要比客户端多着想一丁点.

陷阱二:喝水少!

有时机再扯. 对于 select 网上资料太多, 几乎都有点不痛不痒. 精通真相推荐
man and msdn !!!

成百上千人减肥都是等到口干或者感觉口渴了才喝水,生怕扩张体重。减肥人群提议每一天饮水量不少于2500毫升,假如有活动时还要额外扩张。淡茶和无糖黑咖啡也没错,咖啡仍可以兴奋神经,增加能量消耗。可是空腹喝咖啡会对个别人的胃有鼓舞。

 

骗局三:饮食中不够甲状腺素

正文 – 所有的都亟待前戏

类脂可以保持饱腹感,吸附油脂,避免便秘。首要设有于粗粮,豆类,根茎类蔬菜,水果等中,成年人每日需要摄入40-50克,你吃够了吧?

那起来吧 .  一切从丑陋的跨平台宏开首

陷阱四:极端手段对应暴食

#include <stdio.h>
#include <errno.h>
#include <stdint.h>
#include <stddef.h>
#include <stdlib.h>
#include <signal.h>

//
// IGNORE_SIGPIPE - 管道破裂,忽略SIGPIPE信号
//
#define IGNORE_SIGNAL(sig)    signal(sig, SIG_IGN)

#ifdef __GNUC__

#include <fcntl.h>
#include <netdb.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/tcp.h>
#include <sys/un.h>
#include <sys/uio.h>
#include <sys/select.h>
#include <sys/resource.h>

/*
* This is used instead of -1, since the
* SOCKET type is unsigned.
*/
#define INVALID_SOCKET      (~0)
#define SOCKET_ERROR        (-1)

#define IGNORE_SIGPIPE()    IGNORE_SIGNAL(SIGPIPE)

// connect链接还在进行中, linux显示 EINPROGRESS,winds是 WSAEWOULDBLOCK
#define ECONNECTED          EINPROGRESS

typedef int socket_t;

#elif _MSC_VER

#undef    FD_SETSIZE
#define FD_SETSIZE          (1024)
#include <ws2tcpip.h>

#undef    errno
#define   errno              WSAGetLastError()

#define IGNORE_SIGPIPE()

// connect链接还在进行中, linux显示 EINPROGRESS,winds是 WSAEWOULDBLOCK
#define ECONNECTED           WSAEWOULDBLOCK

typedef int socklen_t;
typedef SOCKET socket_t;

static inline void _socket_start(void) {
    WSACleanup();
}

#endif

// 目前通用的tcp udp v4地址
typedef struct sockaddr_in sockaddr_t;

//
// socket_start    - 单例启动socket库的初始化方法
// socket_addr    - 通过ip, port 得到 ipv4 地址信息
// 
inline void socket_start(void) {
#ifdef _MSC_VER
#    pragma comment(lib, "ws2_32.lib")
    WSADATA wsad;
    WSAStartup(WINSOCK_VERSION, &wsad);
    atexit(_socket_start);
#endif
    IGNORE_SIGPIPE();
}

稍许人吃多或多或少后,就会暴发负罪感,然后使用极端的手腕来下滑自己的负罪感,比如下顿饭少吃,过量运动等措施,这种艺术对身心带来极大的重伤,会促成便秘、肌肉劳损、饮食失控等问题。

这时再装进一些,  简化操作. 

 

inline socket_t socket_stream(void) {
    return socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
}

inline int socket_close(socket_t s) {
#ifdef _MSC_VER
    return closesocket(s);
#else
    return close(s);
#endif
}

inline int socket_set_block(socket_t s) {
#ifdef _MSC_VER
    u_long mode = 0;
    return ioctlsocket(s, FIONBIO, &mode);
#else
    int mode = fcntl(s, F_GETFL, 0);
    if (mode == SOCKET_ERROR)
        return SOCKET_ERROR;
    if (mode & O_NONBLOCK)
        return fcntl(s, F_SETFL, mode & ~O_NONBLOCK);
    return 0;
#endif    
}

inline int socket_set_nonblock(socket_t s) {
#ifdef _MSC_VER
    u_long mode = 1;
    return ioctlsocket(s, FIONBIO, &mode);
#else
    int mode = fcntl(s, F_GETFL, 0);
    if (mode == SOCKET_ERROR)
        return SOCKET_ERROR;
    if (mode & O_NONBLOCK)
        return 0;
    return fcntl(s, F_SETFL, mode | O_NONBLOCK);
#endif    
}

inline int socket_connect(socket_t s, const sockaddr_t * addr) {
    return connect(s, (const struct sockaddr *)addr, sizeof(*addr));
}

陷阱五:一旦不喜欢,紧张或者焦虑,会特意想吃东西

 

诸两人不可以决定自己的心态,遭遇不快活,紧张或者焦虑的事情时,要靠吃东西来化解。当遭受这样的图景时,大家理应进步人际交流,培育多种兴趣爱好,并多去公众场面来分散自己的注意力

大局的测试核心main 函数有些之类

陷阱六:食物网瘾

extern int socket_addr(const char * ip, uint16_t port, sockaddr_t * addr);
extern int socket_connecto(socket_t s, const sockaddr_t * addr, int ms);
extern socket_t socket_connectos(const char * host, uint16_t port, int ms);


//
// gcc -g -O2 -Wall -o main.exe main.c
//
int main(int argc, char * argv[]) {
    socket_start();

    socket_t s = socket_connectos("127.0.0.1", 80, 10000);
    if (s == INVALID_SOCKET) {
        fprintf(stderr, "socket_connectos is error!!\n");
        exit(EXIT_FAILURE);
    }
    puts("socket_connectos is success!");

    return EXIT_SUCCESS;
}

int 
socket_addr(const char * ip, uint16_t port, sockaddr_t * addr) {
    if (!ip || !*ip || !addr) {
        fprintf(stderr, "check empty ip = %s, port = %hu, addr = %p.\n", ip, port, addr);
        return -1;
    }

    addr->sin_family = AF_INET;
    addr->sin_port = htons(port);
    addr->sin_addr.s_addr = inet_addr(ip);
    if (addr->sin_addr.s_addr == INADDR_NONE) {
        struct hostent * host = gethostbyname(ip);
        if (!host || !host->h_addr) {
            fprintf(stderr, "check ip is error = %s.\n", ip);
            return -1;
        }
        // 尝试一种, 默认ipv4
        memcpy(&addr->sin_addr, host->h_addr, host->h_length);
    }
    memset(addr->sin_zero, 0, sizeof addr->sin_zero);

    return 0;
}

有点人吃什么东西都担心会发福,那是因为自己对食物的不打听,能够买一本食物成分表的手册或者在网上查询一下,自己喜欢吃的食品究竟有微微热量,然后遵照自己的喜好增添或删除一些食品,从而保障团结的个子!

 

陷阱七:在上网,看书或者看电视机时吃东西

此间才是你要的一体, 确实的跨平台的客户端非阻塞 connect.

这种无意识的吃饭,吃的东西会相比较多,而且热量都不低,薯片,瓜子等食品是最常见的。我们可以把这种无意识的所作所为改变一下,比如喝水,来下滑热量的摄入

int
socket_connecto(socket_t s, const sockaddr_t * addr, int ms) {
    int n, r;
    struct timeval to;
    fd_set rset, wset, eset;

    // 还是阻塞的connect
    if (ms < 0) return socket_connect(s, addr);

    // 非阻塞登录, 先设置非阻塞模式
    r = socket_set_nonblock(s);
    if (r < 0) {
        fprintf(stderr, "socket_set_nonblock error!\n");
        return r;
    }

    // 尝试连接一下, 非阻塞connect 返回 -1 并且 errno == EINPROGRESS 表示正在建立链接
    r = socket_connect(s, addr);
    if (r >= 0) goto __return;

    // 链接不再进行中直接返回, linux是 EINPROGRESS,winds是 WASEWOULDBLOCK
    if (errno != ECONNECTED) {
        fprintf(stderr, "socket_connect error r = %d!\n", r);
        goto __return;
    }

    // 超时 timeout, 直接返回结果 ErrBase = -1 错误
    r = -1;
    if (ms == 0) goto __return;

    FD_ZERO(&rset); FD_SET(s, &rset);
    FD_ZERO(&wset); FD_SET(s, &wset);
    FD_ZERO(&eset); FD_SET(s, &eset);
    to.tv_sec = ms / 1000;
    to.tv_usec = (ms % 1000) * 1000;
    n = select((int)s + 1, &rset, &wset, &eset, &to);
    // 超时直接滚 or linux '异常'直接返回 0
    if (n <= 0) goto __return;

    // 当连接成功时候,描述符会变成可写
    if (n == 1 && FD_ISSET(s, &wset)) {
        r = 0;
        goto __return;
    }

    // 当连接建立遇到错误时候, winds 抛出异常, linux 描述符变为即可读又可写
    if (FD_ISSET(s, &eset) || n == 2) {
        socklen_t len = sizeof n;
        // 只要最后没有 error那就 链接成功
        if (!getsockopt(s, SOL_SOCKET, SO_ERROR, (char *)&n, &len) && !n)
            r = 0;
    }

__return:
    socket_set_block(s);
    return r;
}

socket_t
socket_connectos(const char * host, uint16_t port, int ms) {
    int r;
    sockaddr_t addr;
    socket_t s = socket_stream();
    if (s == INVALID_SOCKET) {
        fprintf(stderr, "socket_stream is error!\n");
        return INVALID_SOCKET;
    }

    // 构建ip地址
    r = socket_addr(host, port, &addr);
    if (r < 0)
        return r;

    r = socket_connecto(s, &addr, ms);
    if (r < 0) {
        socket_close(s);
        fprintf(stderr, "socket_connecto host port ms = %s, %u, %d!\n", host, port, ms);
        return INVALID_SOCKET;
    }

    return s;
}

陷阱八:两餐间隔时间过长

每五次突破都来之不易. 假使需要在工程中贯彻一份 nonblocking select
connect. 可以一向用地方思路.

两餐间隔时间过长会令人体代谢下降,下一餐容易吃多,要是因加班等原因,可以在两餐之间加点牛奶,面包之类的食品,维持血糖水平,避免下一餐吃多。

主题就是不同平台的select api 的利用罢了. 你理解了可能就少趟点坑,
多无可奈何些~

陷阱九:只吃二种食品

 

界定食品的系列会导致营养不均匀,而且不易长久百折不挠不懈,我们要养成饮食习惯和活动习惯,保证营养的均衡摄入

后记 – 感悟

陷阱十:把果汁最为温馨常喝的饮品

  代码依旧少点注释好, 这几个老人说的代码即注释好像有点道理

江山健身营养师提议天天的热能最多有20%从饮料中得到。果汁即便有抬高的类脂,不过少了胡萝卜素和任何营养,能量还很高,而且饱腹感差。提议只在早餐的时候喝