zoukankan      html  css  js  c++  java
  • 几则笔记

    几则笔记

     

    转载时请注明出处:http://blog.csdn.net/absurd

    1.         鲁棒原来是robust

    一直以为鲁棒是一种与自动控制相关的高深理论,所以对它敬而远之。今天看了《读林斌博士写好代码十个秘诀》,才知道鲁棒原来就是robust。这个术语可谓翻译史上的败笔,我算服了。咖啡、沙发、坦克之类的音译外来词,中文里没有对应的词语,采用音译是理所当然的。而robust有一大堆词语可以与之对应,采用什么音译!即使把program译成铺肉葛软也不见得比把robust译为鲁棒更荒谬。

     

    希望各位老大不要把这类词语引入软件领域,没有必要在垃圾词汇上显示自己的高深。

     

    2.         Glib 线程初始化。

    最近一个BUG浪费半天时间。在一个线程里使用g_debug输出调试信息,程序在大多数情况下可以正常工作,偶尔会在g_debug里退出。跟踪到这个函数的代码里,很快发现原来是因为g_debug重入了。

     

    心想,哪有Log函数不能重入的?glib更不会做得这么差吧。再仔细阅读相关代码,原来它们是可以重入的,只是要调用g_thread_init多线程初始化。

     

    为什么没有想到要先调用g_thread_init初始化线程呢?首先是以为gtk_init里面已经调了g_thread_init初始化线程。其次是以为只要不用glibthread函数就不必调用g_thread_init。结果错了,只要是多线程环境都要调用它。看来我以为这三个字真不是什么东西。

     

    3.         过滤g_debug/g_warning/g_error等输出的调试信息。

    gliblog函数不能根据环境变量来设置log过滤级别,也没有提供设置过滤级别的函数。这有些违背常规,所幸的是可以通过另外一个函数实现。下面的这个例子演示了如何过滤debug级别的调试信息:

          

    #include <glib.h>

    void    none_log(const gchar   *log_domain,

        GLogLevelFlags log_level,

        const gchar   *message,

        gpointer       user_data)

    {

        return;

    }

     

    int main(int argc, char* argv[])

    {

        GMainLoop* main_loop = g_main_loop_new(NULL, FALSE);

     

        g_log_set_handler(NULL, G_LOG_LEVEL_DEBUG, none_log, NULL);

     

        g_debug("%s:%d", __func__, __LINE__);

        g_warning("%s:%d", __func__, __LINE__);

     

        g_main_loop_run(main_loop);

     

        return 0;

    }

     

    gcc -g `pkg-config --cflags --libs glib-2.0` t.c -o t.exe

     

  • 相关阅读:
    阿里云ssh断开处理办法
    OSSIM安装使用教程(OSSIM-5.6.5)
    MySQL字符串列与整数比较
    Linux获取so/ko文件版本号教程
    Linux服务器后门自动化查杀教程
    最强半自动化抓鸡工具打造思路
    渗透测试报告中的那些名词解释
    ELK+MySQL出现大量重复记录问题处理
    Python3+SQLAlchemy不使用字段名获取主键值教程
    Python3+SQLAlchemy+Sqlite3实现ORM教程
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167861.html
Copyright © 2011-2022 走看看