几则笔记

几则笔记

 

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

 

你可能感兴趣的:(thread,多线程,gcc,null,domain,gtk)