使TSYNEDIT线线程安全用于背景处理
Making TSynEdit lines thread-safe for background processing
在过去的几周中,我一直很忙地创建基于Fine Tsynedit组件的自定义内部代码编辑器。
编辑线需要进行一些背景处理,以验证用户输入并突出潜在的错误语法。该处理是每500毫秒触发的,由主形式的A ttimer 触发。
验证器线程在填充
的每条线上迭代std::map<int, String>
使用行号/错误文本。
tsynedit的 onspeciallinecolor 事件正在寻找地图中的相应行,如果 isempty()是false,则行的背景变成红色。
要使合成足够充分的线程安全,而无需使用 synchronize()或某些 winapi 消息的消息,我的想法是,使用某种代码这个:
#include <memory>
#define BOOST_THREAD_USE_LIB
namespace boost { extern "C" void tss_cleanup_implemented(void) {}; }
#include <boost/thread.hpp>
class TMySynEdit : public TSynEdit
{
private:
boost::mutex FMutexLines;
TStrings* GetLines()
{
boost::lock_guard<boost::mutex> guard(FMutexLines);
return TSynEdit::Lines;
}
void SetLines(TStrings* ALines)
{
boost::lock_guard<boost::mutex> guard(FMutexLines);
TSynEdit::Lines = ALines;
}
public:
__fastcall TMySynEdit(TComponent* AOwner)
: TSynEdit(AOwner)
{}
virtual __fastcall ~TMySynEdit()
{}
__property TStrings* Lines = {read=GetLines, write=SetLines};
};
用线程安全(?)一个。
计时器触发的线程是在 boost :: thread 中运行的解析功能。
我现在的问题是:这是一个足够的解决方案,还是我在这里错过了一些东西?
感谢雷米(Remy),我可能会回到工作时返回到非线程版本。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 用于访问容器<T>数据成员的正确 API
- 重载操作程序时出错>>用于类中的字符串 memebr
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- C++中的cin.ignore()函数不适用于整个流
- 没有用于初始化C++中的变量模板的匹配构造函数
- 如何在全屏模式下(在OpenGL中)使背景透明
- 用于C++中带有数组和指针的循环
- 为什么它不适用于Visual 2019的原因
- 使用在用于SFINAE的void_t中具有参数的方法
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 重载==不适用于二进制树
- Insert函数不适用于2 if语句C++
- 用于矢量处理的多个线程
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 为什么模数运算符不适用于该代码
- 并行用于C++17中数组索引范围内的循环
- 使TSYNEDIT线线程安全用于背景处理