• 几则笔记


    几则笔记

     

    转载时请注明出处: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

     

  • 相关阅读:
    html-标题标签、水平线标签和特殊字符
    htm-文字标签和注释标签
    html-html简介
    scss-函数
    scss-!optional
    scss-@extend
    解决SecureCRT下spark-shell中scala无法删除问题
    Python list降序排序
    Python 字典的一键多值,即一个键对应多个值
    python 数组中如何根据值,获取索引,如何根据索引删除值 , 以及如何根据值删除值
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167861.html
Copyright © 2020-2023  润新知