![]() |
![]() |
![]() |
GLib参考手册 | ![]() |
---|
GLib 的更改GLib 的更改 — 和先前版本的 GLib 之间不兼容的更改 |
GLib 更改了伪随机数生成器-赛特旋转 (Mersenne Twister,
就是 GRand 和
GRandom 所使用的) 的种子算法。
这是必须的,因为一些种子可能产生很差的伪随机流。
使用新版本的 GLib g_rand*_int_range()
产生的随机整数也会有稍微好一点的公平分配。
网页上关于赛特旋转(Mersenne Twister)伪随机数生成器的进一步信息在 http://www.math.keio.ac.jp/~matumoto/emt.html.
2.0.x 中的旧的种子和生成算法可以通过设置环境变量 G_RANDOM_VERSION
为 '2.0',来替代新版使用。只在您有的确需要传承的 Glib-2.0 产生的数字序列时
才使用 GLib-2.0 的算法。
位于 http://developer.gnome.org 的 GNOME 2.0 移植指南有更多的从 1.2 到 2.0 移植的细节讨论。请阅读 GLib 一节。
事件循环功能 GMain 已经广泛的修订, 以支持在分离线程的多个分离的主循环。 所有 sources (计时、空闲等函数) 都与GMainContext联系起来了。
仍然存在兼容函数,以使多数处理主循环的程序代码能继续工作。 但是创建新的 sources 的自定义类型的代码需要修改。
主要的修改是:
Sources 以 GSource * 暴露,而不是仅仅是数字 id。
"derivation" 结构 从GSource创建一个 sources 新类型,
所以虚函数 GSource的source_data
参数
被替换为 GSource *.
Sources 刚刚创建,于是稍候被添加到了具体的 GMainContext。
修改了调度,以使回调和数据都可以传递给 dispatch()
虚函数。
为了顺应这一变化, GIOChannel 的 vtable 改变了,同时
add_watch()
被替换为
create_watch()
.
更改了g_list_foreach()
and
g_slist_foreach()
,
以使它们安全的应对移除当前条目,而不是下一条目。
在任何情况下回调这些函数时,都不推荐变更这些链表。
GDate 现在用 UTF-8,而不是当前区域设置。
如果希望使用它处理当前区域的编码,
您需要首先使用g_locale_to_utf8()
转换字符串的编码。
g_strsplit()
被更正为:
包含结尾的空标记,而不是剥离它们
最多分割为 max_tokens
节, 而不是
max_tokens + 1
所有依赖于这些 bug 的代码需要更正。
移除的过时函数:
g_set_error_handler()
,
g_set_warning_handler()
,
g_set_message_handler()
, 使用
g_log_set_handler()
来替代.