只有一个地方用到了 function CheckSynchronize(timeout : longint=0) : boolean;
{ assumes being called from GUI thread } var ExceptObj: TObject; tmpentry: TThread.PThreadQueueEntry;
begin result:=false; { first sanity check } if Not IsMultiThread then Exit {$ifdef FPC_HAS_FEATURE_THREADING} { second sanity check } else if GetCurrentThreadID<>MainThreadID then raise EThread.CreateFmt(SCheckSynchronizeError,[GetCurrentThreadID]);
-------------------------------------------------------- 联想起 energy 作者说的,lcl 库无法和 gtk 同时使用。原因应该也差不多。
要说的是 go 也要负一部分责任,相同的代码,似乎在 windows 下就不会因为对象 gc 异常,难道它们的 gc 机制不同。害得和碰到这种问题时只能用 mac 裸机测试,无法用 windows 统一处理。但这有一个问题,很显然这样处理后在 linux 下肯定也会有问题。比如就有反映说 lazarus 在 linux 下的 synedit 无法输入(不过我这里实际上可以)。