我在 Windows (Win32, C/C++) 上使用 Scintilla 编辑控件。该控件是在 WndProc 中创建的。我有第二个线程,用 Boost.Thread 创建,它充当拼写检查器,并用红色波浪线标记拼写错误的单词。因此,我有两个线程更改 Scintilla 控件的内容。
起初,程序在编辑文本时崩溃。所以我研究了 Scintilla 的线程安全性。我发现的信息很少,但我设法在文档中得到了这个引用:
如果直接调用从不同线程执行到 Scintilla 窗口的本机线程会导致问题,在这种情况下,应使用 SendMessage(hSciWnd, SCI_*, wParam, lParam) 与窗口的线程同步。
当然,我使用的是直接调用,因此我将拼写检查线程中的所有调用更改为 SendMessage,现在程序不再崩溃。最后,这就是问题所在,我解决了这个问题,还是我会遇到 Scintilla 和多线程的其他怪癖?