(原)多线程sdl_ttf显示文字
最近在使用sdl做视频显示,因为需要显示文字,所以就找了sdl的拓展库,sdl_ttf来做文字显示。
这里说明一下:sdl_ttf不支持多线程,官方上面有说明,它不是多线程安全的。
所以当我最初使用sdl_ttf来做多线程显示文字的时候,就会出现崩溃的问题。
崩溃的地方老是出现在:FT_Load_Glyph这个函数。
然后我就发现,原来sdl_ttf不支持多线程,而sdl_ttf下的freetype它其实也是非多线程安全的,也只单线程使用。
同时在查找的过程中,我找到了几个很有用的帖子,这里贴出来给大家:
https://bugs.launchpad.net/ubuntu/+source/freetype/+bug/1199571
其中有人在多线程中使用freetype出现崩溃,然后把其作为Bug反馈给了freetype开发团队,上面就是Bug的反馈原内容。
然后还有这个:https://github.com/behdad/ftthread
这里是一个多线程测试freetype的tools,它是基于linux环境的。
我把帖子的内容贴出来:
ftthread
======== This is a test tool to use FreeType2 in a multi-threaded environment. FreeType2 is not thread-safe, and the original author(s) of FreeType
suggest that one FT_Library per thread should be used. Unfortunately
this is too inflexible to be really useful. However, there are ways to use it safely in a multi-threaded environment
with simple modifications to FreeType. I have now produced a complete
patchset to that effect and tested it using this utility. The patchset
is available here: https://github.com/behdad/freetype/commits/ftthread and I hope it to be integrated into upstream FreeType very soon. In
the mean time, here's the new threadsafety model, which needs to be
integrated into FreeType documentation. Note that cairo graphics
library already uses FreeType in this way and as such the entire GNOME
desktop has been relying on this model, to huge disappointment as seen
in the following bug reports, each of which have many duplicates: https://bugzilla.redhat.com/show_bug.cgi?id=678397
https://bugzilla.redhat.com/show_bug.cgi?id=1004315
https://bugzilla.redhat.com/show_bug.cgi?id=1164941
https://bugzilla.redhat.com/show_bug.cgi?id=1165471
https://bugs.freedesktop.org/show_bug.cgi?id=69034 Threadsafety model
================== - A FT_Face object can only be safely used from one thread at a time. - A FT_Library object can be used without modification from multiple
threads at the same time. - FT_Face creation / destruction with the same FT_Library object can
only be done from one thread at a time. Discussion
========== In this model, one can use a single FT_Library object across threads as
long as a mutex lock is used around FT_New_Face / FT_Done_Face. Any calls
to FT_Load_Glyph and similar API are safe and do not need the lock to be
held as long as the same FT_Face is not used from multiple threads at the
same time. Note that this goes almost all the way to making FreeType API useful from
multiple threads. The only remaining bit is the unfortunately API that is
FT_Library_SetLcdFilter (and to less extent FT_Library_SetLcdFilterWeights). I will try to work out a solution for replacing FT_Library_SetLcdFilter
using new FT_LOAD_* values. There seem to be quite a few bits available in
that space, so that work should happen soon.
文中指出,freetype是非多线程安全的,同时他对于使用多线程的环境下,提出了自己的使用安全模型,并给出了代码。
按照他的示例代码,我对sdl_ttf的源码进行修改,是sdl_ttf适应多线程。
(原)多线程sdl_ttf显示文字的更多相关文章
- SDL显示文字
前面教程里,我们只显示图片,没提到如何显示文字, SDL本身没有显示文字功能,它需要用扩展库SDL_ttf来显示文字.ttf是True Type Font的缩写,ttf是Windows下的缺省字体,它 ...
- 实现password框中显示文字提示的方式
其实实际上实现中并不能让password中显示文字提示,但是我们在工作中有这样的需求,当没输入东西的时候,框内有提示输入密码,但是当输入东西的时候又显示的是*号,那么是如何实现的呢?其实原理很简单,就 ...
- Android 使用Font Awesome 显示文字图标
Android 使用Font Awesome 显示文字图标 简单几步就可以完成 简单的效果图: 1. 创建 assets 文件夹 在Android Studio 上的创建步骤为: 在 src/main ...
- 根据html容器大小和显示文字多少调节字体大小
在做html相关的东西的时候经常会遇到这样的问题,容器大小(长x宽)固定,容器包含内容(特指文字)多少不固定,这个时候就让人很苦恼了,将字体大小设置成多少才合适呢?下面看看我的解决思路: 首先要知道网 ...
- (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。
关于多线程执行显示进度条的实例! 之前回答了一篇关于怎么在线程中操作进度条的帖子,估计有人看的不是很明白今天没事,写了一个小小的实例,很简单,就2个文件权当抛砖引玉,希望有更好解决方案的人发表一下意见 ...
- Qt中在图片上叠加显示文字
Qt中在图片上叠加显示文字 QCustLabel::QCustLabel(QWidget *parent):QLabel(parent){ setPixmap(QPixmap(QString::f ...
- 动态更新Toolbar Menu以及Menu中同时显示文字和图标
动态更新Toolbar Menu以及Menu中同时显示文字和图标 我们经常会有这样的需求,在切换Fragment或者点击某个按钮后动态更新Toolbar上Menu项.但是onCreateOptions ...
- 解决TextView在显示文字的时候,一行还没显示满就跳到下一行
转载请注明:转自 http://blog.csdn.NET/u011176685/article/details/48295185 一.问题描述: Android的TextView在显示文字的时候,如 ...
- ActionBar只显示图标不显示文字
问题:ActionBar菜单项android:showAsAction设置为android:showAsAction="always|withText"或者android:show ...
随机推荐
- C++11 override和final
30多年来,C++一直没有继承控制关键字.最起码这是不容易的,禁止一个类的进一步衍生是可能的但也很棘手.为避免用户在派生类中重载一个虚函数,你不得不向后考虑. C++ 11添加了两个继承控制关键字:o ...
- 【Java】IO Stream详细解读
成鹏致远 | 2013年12月31日 什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流 ...
- 关于SpringKafka消费者的几个监听器:[一次处理单条消息和一次处理一批消息]以及[自动提交offset和手动提交offset]
自己在使用Spring Kafka 的消费者消费消息的时候的实践总结: 接口 KafkaDataListener 是spring-kafka提供的一个供消费者接受消息的顶层接口,也是一个空接口; pu ...
- H3C部分笔记
进入交换机各个视图的命令如下图: 用户视图 系统视图 查看历史命令 配置历史命令缓存大小为30 配置Heade信息 Header 3种类型: incoming:登录终端用户界面时的提示信息. logi ...
- H3C AP实现定时重启
#job radio_diable view system time 1 repeating at 03:00 command wlan radio disable all time 2 rep ...
- 2. 感知机(Perceptron)基本形式和对偶形式实现
1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...
- web开发经验
图片显示不全 网站进行了迁移,更换了新框架,结果出现了图片显示不全的问题,后来发现是nginx权限问题 curl 无报错,无返回 有可能是url错误,而无服务器对错误的url返回空,没返回错误
- MYSQL优化9大法!
通常网站的性能瓶颈在数据库查询,如果你希望你的网站在一定阶段之内保持稳定,优化你的SQL和数据库是非常必要的一个优化环节.优化数据库是一个很大的话题,这里只是摘要一些比较关键的优化参考建议,并且需要具 ...
- C#反序列化:xml转化为实体
public static T DeserialXmlToModel<T>(string xmlDocument) { T cmdObj = default(T); XmlSerializ ...
- C语言 · 字符删除
算法训练 字符删除 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,先输入一个字符串str(长度不超过20),再输入单独的一个字符ch,然后程序会把字符串str ...