Se eu chamar MainForm->ControlList1->Invalidate()
de um TIdUDPServer::>OnUDPRead
evento, isso é seguro para threads ou ainda preciso usar TThread::Synchronize()
or TThread::Queue()
?
JKofsky's questions
Estou tentando fazer JSON funcionar no C++Builder. Tenho olhado o código para Delphi sobre como criar um arquivo JSON, e todos eles parecem criar as partes Doc e Data do arquivo/string JSON, mas liberam apenas o Doc.
Por exemplo:
void __fastcall TMainForm::Panel1Click(TObject* Sender)
{
std::unique_ptr<TJSONObject> jsonDoc { new TJSONObject() };
TJSONObject* jsonData = new TJSONObject();
jsonDoc->AddPair("cmd", rdsNowPlaying);
jsonDoc->AddPair("station", "WBCB_FM");
jsonDoc->AddPair("data", jsonData);
jsonData->AddPair("testNull", new TJSONNull() );
jsonData->AddPair("testTrue", new TJSONBool(true) );
jsonData->AddPair("testFalse", new TJSONBool(false) );
Memo1->Lines->Text = jsonDoc->Format(3);
}
Dá jsonDoc->AddPair("data", jsonData);
"propriedade" de jsonData
para jsonDoc
? Então quando jsonDoc
é liberado, jsonData
é liberado também?
Atribui jsonData->AddPair("testTrue", new TJSONBool(true) );
a propriedade do TJSONBool
para jsonData
e ele é liberado quando jsonData
é liberado?
O disparo do OnClick
evento é exibido corretamente, mas é outra questão "Como eu libero (delete) a memória"? Ou std::unique_ptr
e ele TJSONObject
cuida de si mesmo?
ps rdsNowPlaying
é enum
declarado no cabeçalho.
Preciso de uma variável de nível de objeto ( TIniFile* ini
). No passado, os exemplos de código e/ou convenção seriam new
/ delete
o objeto, assim:
frmMain.h
...
private:
TIniFile* ini;
...
constructor
...
ini = new TiniFile(fileName);
...
destruidor
...
delete ini;
...
Tenho visto muito sobre usar std::unique_ptr()
instead. Isso faz o que eu acho que faz: libera memória automaticamente quando o objeto é liberado?
frmMain.h
#include <memory>
...
private:
std:unique_ptr<TIniFile> ini;
...
constructor
...
ini = make_unique<TiniFile>(fileName);
...
sem destruidor