Делаем строки TSynEdit поточно-ориентированными для фоновой обработки

В последние несколько недель я был очень занят созданием собственного редактора внутреннего кода, основанного на прекрасном компоненте TSynEdit.

Есть некоторая фоновая обработка строк редактора, необходимых для проверки ввода пользователя и выделения потенциально неправильного синтаксиса. Эта обработка запускается каждые 500 миллисекунд TTimer на основной форме.

валидатор поток перебирает каждую строку, заполняя

std::map<int, String>

с номер строки / текст ошибки.

TSynEdit-х OnSpecialLineColor событие ищет соответствующую линию на карте, и если Пустой() значение false, фон строки становится красным.

Чтобы сделать SynEdit достаточно потокобезопасным без необходимости использования Синхронизация () или несколько 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};
};

Перезаписывает свойство линии из TSynEdit с потокобезопасным (?).

Поток, запускаемый по таймеру, является функцией синтаксического анализа, работающей в повышение :: нить.

Мой вопрос сейчас:
Это адекватное решение, или я что-то здесь упускаю?

0

Решение

Благодаря Реми, я вернусь к не-поточной версии, когда вернусь на работу.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]