ThreadSynchronize (C++)
Description
This example demonstrates the use of the Synchronize method to execute a procedure on the main thread that "owns" the GUI. Also, WaitFor is used to wait for the thread's termination.
Code
__fastcall TEnumeratorThread::TEnumeratorThread(TMemo* Memo)
: TThread(true)
{
/* Initialize internal fields */
m_Memo = Memo;
m_CurrNbr = 0;
m_Stop = 0;
}
void __fastcall TEnumeratorThread::Execute()
{
/* Repeat the loop until the flag says otherwise. */
while (!m_Stop)
{
/* Wait for 100 milliseconds. */
Sleep(100);
/*
Run the AddNewNumberToMemo procedure on the main thread.
This makes it safe to access GUI from this thread.
*/
Synchronize(AddNewNumberToMemo);
}
m_Stop = 0;
}
void __fastcall TEnumeratorThread::GentleStop()
{
/* Set the flag to 1. */
InterlockedIncrement(&m_Stop);
/* Wait for this thread to finish executing */
this->WaitFor();
}
void __fastcall TEnumeratorThread::AddNewNumberToMemo()
{
/* Increase the current number and add it to the memo. */
m_CurrNbr++;
m_Memo->Lines->Add(IntToStr(m_CurrNbr));
}
Uses
- System.Classes.TThread.Synchronize ( fr | de | ja )
- System.Classes.TThread.WaitFor ( fr | de | ja )