• 线程维护日志队列


    基本概念就是,业务线程输出日志(主要是增加日志队列节点),然后副线程负责日志队列的消耗。

    这样做的好处就是不会因为日志输出而造成线程阻塞。

    代码很简单,如下:

    //code by lichmama from cnblogs.com
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <windows.h>
    #include <process.h>
    
    struct _log_ {
        int log_type;
        int log_length;
        char log_text[1024];
    };
    
    typedef struct _log_queue_ {
        struct _log_ log;
        struct _log_queue_ *next;
    }LOG_QUEUE, *PLOG_QUEUE;
    
    HANDLE hmutex = NULL;
    PLOG_QUEUE head = NULL;
    PLOG_QUEUE tail = NULL;
    PLOG_QUEUE temp = NULL;
    PLOG_QUEUE ttmp = NULL;
    
    unsigned  int __stdcall log_thread(void *args){
        for(;;){
            WaitForSingleObject(hmutex, INFINITE);
            if(head){
                ttmp = head;
                printf("%03d, %d, %s
    ", ttmp->log.log_type, ttmp->log.log_length, ttmp->log.log_text);
                head = head->next;
                if(!head)tail = NULL;
                free(ttmp);
                ttmp = NULL;
            }
            ReleaseMutex(hmutex);
        }
        return 0;
    }
    
    int main(){
        HANDLE hmutex = CreateMutex(NULL, TRUE, NULL);
        HANDLE hthread = _beginthreadex(NULL, 0, log_thread, NULL, 0, NULL);
        char ch;
        while((ch=getch())!='q'){
            temp = (PLOG_QUEUE)malloc(sizeof(LOG_QUEUE));
            temp->log.log_type = ch-'0';
            temp->log.log_length = 11;
            strcpy(temp->log.log_text, "hello,world");
            temp->next = NULL;
            if(!head)tail = temp, head = temp;
            else tail->next = temp, tail = temp;
        }
        CloseHandle(hmutex);
        TerminateThread(hthread, 0);
        CloseHandle(hthread);
        return 0;
    }
  • 相关阅读:
    android的窗口创建过程
    android的Binder
    Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
    android的事件分发测试结果
    Don't Store Data in the Application Object
    关于算法
    自定义控件其实很简单3/4
    自定义控件其实很简单2/3
    建设一个能承受500万PV/每天的网站
    strust2里面package的元素排列顺序
  • 原文地址:https://www.cnblogs.com/lichmama/p/3919458.html
Copyright © 2020-2023  润新知