亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? msgqueue.c

?? 《多任務下的數據結構》隨書的源代碼。探討多任務下的常用數據結構的實現
?? C
字號:
/*
 * Copyright (c) 2000-2008
 * Author: Weiming Zhou
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  
 */

#ifdef _WIN32
#include <windows.h>
#endif
#include "CapiGlobal.h"
#include "DoubleList.h"
#include "MTask.h"
#include "MTList.h"
#include "MsgQueue.h"

#define DEFAULT_MSGQUEUE_LEN    65535

/**	消息隊列的創建函數

	@param	INT nMaxLen - 消息隊列的最大長度	
	@return	MSGQUEUE * - 返回創建的消息隊列指針,失敗返回NULL	
*/
MSGQUEUE * MsgQueue_Create(INT nMaxLen)
{
    MSGQUEUE    *pQueue;

    pQueue = (MSGQUEUE *)malloc(sizeof(MSGQUEUE));
    if ( pQueue != NULL )
    {
        pQueue->pSem = SemaCreate(0, nMaxLen);
        if ( pQueue->pSem != NULL )
        {
            pQueue->nMaxLen = nMaxLen;
            pQueue->pList = MTList_Create();
            if ( pQueue->pList == NULL )
            {
                SemaClose(pQueue->pSem);
                free(pQueue);
                pQueue = NULL;
            }
        }
        else
        {
            free(pQueue);
            pQueue = NULL;
        }
    }
    return pQueue;
}


/**	消息隊列的釋放函數

	@param	MSGQUEUE *pQueue - 消息隊列指針	
	@param	DESTROYFUNC DestroyFunc - 數據釋放回調函數	
	@return	void - 無	
*/
void MsgQueue_Destroy(MSGQUEUE *pQueue, DESTROYFUNC DestroyFunc)
{
    if ( pQueue != NULL )
    {
        INT nMaxLen;
        if ( pQueue->nMaxLen > DEFAULT_MSGQUEUE_LEN )
        {
            nMaxLen = pQueue->nMaxLen;
        }
        else
        {
            nMaxLen = DEFAULT_MSGQUEUE_LEN;
        }
        SemaRelease(pQueue->pSem, nMaxLen ); /* 讓所有阻塞的接收操作可以繼續*/
        MTList_Destroy(pQueue->pList, DestroyFunc);
        SemaClose(pQueue->pSem);
        free(pQueue);
    }
}


/**	消息隊列的發送函數,將數據發送到消息隊列中

	@param	MSGQUEUE *pQueue - 消息隊列指針	
	@param	void *pData - 要發送到消息隊列里的數據指針	
	@return	INT - 同MTList_InsertTail()函數	
*/
INT MsgQueue_Send(MSGQUEUE *pQueue, void *pData)
{
    INT     nRet;

    nRet = MTList_InsertTail(pQueue->pList, pData);
    SemaRelease(pQueue->pSem, 1); /* 將計數加1 */

    return nRet;
}


/**	消息隊列的接收數據函數,從消息隊列中接收數據出來

	@param	MSGQUEUE *pQueue - 消息隊列指針	
	@return	void * - 返回從消息隊列中接收到的數據	
*/
void * MsgQueue_Recv(MSGQUEUE *pQueue)
{
    SemaWait(pQueue->pSem); /* 將計數減1,計數為0則會阻塞住 */
    return MTList_PopHead(pQueue->pList);
}

/**	消息隊列的枚舉初始化函數

	@param	MSGQUEUE *pQueue - 消息隊列指針	
	@return	void - 無	
*/
void MsgQueue_EnumBegin(MSGQUEUE *pQueue)
{
    MTList_EnumBegin(pQueue->pList);
}

/**	消息隊列的枚舉下一個數據函數

	@param	MSGQUEUE *pQueue - 消息隊列指針	
	@param	VISITFUNC VisitFunc - 數據訪問回調函數	
	@return	INT - 同MTList_EnumNext()函數	
*/
INT MsgQueue_EnumNext(MSGQUEUE *pQueue, VISITFUNC VisitFunc)
{
    return MTList_EnumNext(pQueue->pList, VisitFunc);
}

#define MAX_QUEUE_SIZE  4096
#define MAX_LISTEN_SIZE 16
#define MAX_THREADS     10
#define DEFAULT_PORT    8080
#if  0
MSGQUEUE    *g_pQue;

void ProcessRequest(void *args);

/**	初始化函數,初始化時會先創建消息隊列,并預創建MAX_THREADS個線程

	@return	INT - CAPI_FAILED表示失敗,CAPI_SUCCESS表示成功	
*/
INT Init()
{
    INT i;

    g_pQue = MsgQueue_Create(MAX_QUEUE_SIZE);
    if ( g_pQue == NULL )
    {
        return CAPI_FAILED;
    }
    for ( i = 0; i < MAX_THREADS; i++ )
    {
        _beginthread(ProcessRequest, 0, NULL);
    }

    return CAPI_SUCCESS;
}

/**	接收請求的處理函數
        實現將接收到的請求的SOCKET標識符放入到消息隊列中

        @return	INT - CAPI_FAILED表示失敗,CAPI_SUCCESS表示成功	
*/
INT RecvQuest()
{
    struct	sockaddr_in local, from;
    SOCKET	s, msgsock;
    int		fromlen;

    s = socket(AF_INET, SOCK_STREAM, 0);
    if (s ==  INVALID_SOCKET)
    {
        return CAPI_FAILED;
    }
    local.sin_family = AF_INET;
    local.sin_addr.s_addr = INADDR_ANY;
    local.sin_port = htons(DEFAULT_PORT);
    
    if ( bind(s, (struct sockaddr*)&local, sizeof(local)) == SOCKET_ERROR) 
    {
        return CAPI_FAILED;
    }
    if ( listen(s, MAX_LISTEN_SIZE ) == SOCKET_ERROR)
    {
        return CAPI_FAILED;
    }

    while( msgsock = accept(s, (struct sockaddr*)&from, &fromlen) 
        != INVALID_SOCKET )
    {
        SOCKET *pNewSock = new SOCKET;
        *pNewSock = msgsock;
        MsgQueue_Send(g_pQue, (void *)pNewSock);
    }
    return CAPI_SUCCESS;
}

/**	處理請求的任務處理函數
        這個函數是處理任務的入口函數,在里面處理接收客戶端發來的字符串“Hello!”,
        并發送響應“OK"回客戶端。

	@param	void * -未使用	
	@return	void -無	
*/
void ProcessRequest(void *)
{
    SOCKET *pSock;
    while (pSock = MsgQueue_Recv(g_pQue))
    {
        int  len;
        char buf[1024];
        len = recv(*pSock, buf, sizeof(buf)-1, 0);
        if ( len > 0 )
        {
            buf[len] = '\0';
            if ( strcmp(buf, "Hello!")== 0 )
            {
                strcpy(buf, "Ok");
                send(*pSock, buf, strlen(buf), 0);
            }
        }
    }
}


/**	將SOCKET信息打印到屏幕的回調函數

	@param	void *pData - 數據指針	
	@return	INT - 取決于WriteToScreen()函數 	
*/
INT PrintAllIPToScreen(void *pData)
{
    SOCKET *pSock = pData;
    return WriteToScreen(*pSock);    
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区观看| 激情深爱一区二区| 美女视频一区二区三区| 国产美女在线精品| 日韩国产欧美在线观看| 色欧美片视频在线观看| 激情文学综合网| 一区二区三区在线观看网站| 日韩欧美第一区| 日本韩国欧美国产| 国产69精品久久久久777| 午夜精品福利在线| 亚洲婷婷国产精品电影人久久| 91精品国产一区二区三区香蕉| av不卡免费在线观看| 久久国产尿小便嘘嘘尿| 午夜在线成人av| 国产成人在线电影| 美女久久久精品| 亚洲综合久久久久| 中文字幕一区二区三| 国产人伦精品一区二区| 欧美一区二区黄| 国产精品国产三级国产aⅴ中文| 欧美一区二区成人6969| 日韩不卡手机在线v区| 一区二区三区四区在线播放| 日本一区二区在线不卡| 欧美mv日韩mv亚洲| 欧美日韩成人综合天天影院| 在线精品视频一区二区三四 | 亚洲一区二区四区蜜桃| 日本一区二区免费在线观看视频| 欧美一级理论片| 51精品国自产在线| 欧美日韩成人一区二区| 欧美亚洲一区二区在线观看| 色综合久久六月婷婷中文字幕| 成人网页在线观看| 成人高清免费观看| 成人一区在线观看| www.色精品| av在线不卡观看免费观看| 成人毛片在线观看| 成人福利视频在线| 91视频.com| 一本一本久久a久久精品综合麻豆| 91在线观看美女| 91色porny| 91成人免费电影| 欧美午夜片在线观看| 欧美视频在线一区| 制服.丝袜.亚洲.中文.综合 | 欧美激情一区二区三区蜜桃视频 | 欧美极品少妇xxxxⅹ高跟鞋 | 国产精品自产自拍| 国产精品夜夜爽| k8久久久一区二区三区 | 成人福利视频网站| 99视频热这里只有精品免费| 97成人超碰视| 欧美视频三区在线播放| 国产精品视频免费看| 久久综合九色综合97婷婷女人| 99精品在线免费| 国产午夜精品久久久久久免费视 | 亚洲综合视频在线| 亚洲国产精品久久久久秋霞影院 | 风间由美一区二区三区在线观看| 国产成人精品免费| 一本久久a久久精品亚洲| 欧美在线观看18| 欧美一区二区在线播放| 久久久夜色精品亚洲| 一色桃子久久精品亚洲| 亚洲大片精品永久免费| 久久99久久久久| 成年人国产精品| 精品视频1区2区3区| 日韩免费观看2025年上映的电影| 国产精品女同互慰在线看| 亚洲激情中文1区| 久久国产剧场电影| 色综合天天综合网天天狠天天 | 国产精品1区2区3区在线观看| 成人av片在线观看| 色综合色狠狠综合色| 2020国产精品| 欧美国产禁国产网站cc| 亚洲444eee在线观看| 国产伦精品一区二区三区视频青涩| 99久久综合国产精品| 这里只有精品视频在线观看| 国产精品成人一区二区艾草| 日韩高清一区二区| 91在线云播放| 精品久久久久久久久久久院品网| 亚洲精品乱码久久久久久黑人| 麻豆freexxxx性91精品| 91美女蜜桃在线| 久久一夜天堂av一区二区三区| 夜夜嗨av一区二区三区中文字幕 | 亚洲欧美日韩小说| 久久成人免费电影| 欧美日韩你懂的| 国产精品久久久久毛片软件| 99久久精品免费看| 亚洲激情av在线| 色综合天天综合狠狠| 国产精品素人一区二区| 精品亚洲欧美一区| 国产精品短视频| 欧洲一区在线电影| 国内精品写真在线观看| 国产精品福利影院| 欧美日韩国产一区| 国产精华液一区二区三区| 久久久久久久久久久电影| 欧洲中文字幕精品| 亚洲愉拍自拍另类高清精品| 国产suv精品一区二区三区| 色婷婷久久久综合中文字幕| 精品粉嫩超白一线天av| 亚洲bdsm女犯bdsm网站| 91黄视频在线观看| 自拍av一区二区三区| 制服丝袜在线91| 欧美日韩视频不卡| 久久综合一区二区| 美国精品在线观看| 69av一区二区三区| 午夜精品久久久久| 欧美日韩黄色一区二区| 亚洲电影一区二区| 欧美亚洲动漫精品| 天堂影院一区二区| 欧美日韩一级二级三级| 亚洲国产一区二区视频| 欧美三级欧美一级| 三级亚洲高清视频| 6080午夜不卡| 奇米一区二区三区| 欧美成人猛片aaaaaaa| 久久精品久久精品| 精品国产免费视频| 国产麻豆成人精品| 国产日韩欧美精品电影三级在线| 国产成人免费在线观看| 国产精品每日更新在线播放网址 | 中文字幕一区二区三区色视频| 国产成人免费9x9x人网站视频| 久久久久久黄色| 成人亚洲一区二区一| 1区2区3区欧美| 色婷婷综合久久久久中文| 亚洲一区欧美一区| 欧美一级黄色大片| 极品少妇xxxx精品少妇| 国产情人综合久久777777| 成人av在线一区二区三区| 一区二区日韩电影| 在线观看91av| 激情成人午夜视频| 亚洲欧洲美洲综合色网| 欧美天堂一区二区三区| 美女mm1313爽爽久久久蜜臀| 国产亚洲美州欧州综合国| a美女胸又www黄视频久久| 亚洲品质自拍视频网站| 欧美人伦禁忌dvd放荡欲情| 久久国产精品一区二区| 18欧美亚洲精品| 欧美精品久久天天躁| 国产福利精品一区二区| 一区二区三区不卡视频| 欧美电影免费观看高清完整版在| 成人av第一页| 天涯成人国产亚洲精品一区av| 久久久久久久久久电影| 欧美性猛片aaaaaaa做受| 欧美一区二区三区爱爱| 国产精品一区二区视频| 亚洲自拍偷拍麻豆| 久久婷婷成人综合色| 91麻豆国产在线观看| 蜜臀精品久久久久久蜜臀| 椎名由奈av一区二区三区| 91精品久久久久久蜜臀| 91日韩在线专区| 韩日av一区二区| 亚洲国产精品精华液网站| 久久久精品黄色| 欧美日韩一区二区在线视频| 成人午夜激情影院| 日本不卡一二三| 亚洲精品日日夜夜| 久久精品人人做| 欧美高清激情brazzers| 99久久精品情趣| 国产成人一区在线|