【发布时间】:2019-09-20 15:55:45
【问题描述】:
我正在使用 C++ Builder 2010。我有一个运行良好的 TThread::Synchronize 调用 - 一个线程函数调用 Synchronize 并且运行良好。但是,如果我用TThread::Queue 替换它,它会立即崩溃。
该版本的 C++ Builder 中是否存在特定错误或其他问题?
这是我用来调用主线程函数的函数:
void RunInMainThread(void(__closure *FuncToCall)(const __int64, const wchar_t), const __int64 fP1, const wchar_t fP2)
{
struct
{
private: typedef void(__closure *FTCdef)(const __int64, const wchar_t);
public: __int64 P1;
wchar_t P2;
FTCdef FTC;
void __fastcall ExecFunc()
{
FTC(P1,P2);
}
} Args = { fP1, fP2, FuncToCall };
TThread::Synchronize(NULL, &Args.ExecFunc);
//TThread::Queue (NULL, &Args.ExecFunc);
}
它调用的函数真的很简单,它只是用一些文本更新一个工具栏,大概 2-3 行代码。
【问题讨论】:
-
@Spektre 这不是问题。使用
TThread::Queue()/Synchronize()的全部意义在于在 UI 线程的上下文中运行一个函数,在这里可以安全地访问 UI 控件 -
@RemyLebeau 嗯,我明白你的意思了......我之前从未使用过
Queue......
标签: multithreading c++builder c++builder-2010 rad-studio