我的环境:带或不带和用于C++ Builder中调用同步()
OS - 的Windows7专业版(32位)
IDE - RadStudio XE2 UPDATE4
我想知道关于同步()函数。
Synchronize()函数用于线程程序中。关于C++ Builder中使用的同步(),示例如下(如可以在here可以看出)
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(&UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall TMyThreadClass::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
我感到困惑的是,在一些老版本的C++ Builder的(如BCB6), 的同步()用于
// Synchronize(UpdateCaption);
没有 “&” 函数名之前;
另外在Delphi代码作为here, 没有“&”函数名之前;
// Synchronize(UpdateCaption);
所以,这是C++ Builder中使用同步()的正确方法
// Synchronize(UpdateCaption);
或
// Synchronize(&UpdateCaption);
我无论是在实际的代码试过,但似乎相同工作方式。 做UpdateCaption和& UpdateCaption函数的返回地址?
,'UpdateCaption'和'&UpdateCaption'是非法的。这是一个C++ Builder扩展,对于成员函数,'&UpdateCaption'计算为'__closure',它是指向该对象上的对象和成员函数组合的指针。 (C++ 11增加了对语言的封闭;但是C++ Builder早有先例,所以他们不得不为它添加自己的扩展)。显然还有一个特性就是'UpdateCaption'在重载解析中隐式转换为'&UpdateCaption',尽管它本身并没有这样做! (例如'UpdateCaption;'给出错误)。 –
@MattMcNabb:感谢您的评论。所以这是C++ Builder的扩展,而不是标准的C++。 – sevenOfNine
是 - 标准C++(在C++ 11之前)没有关闭;您可以使用的唯一函数是非成员函数。 –