cleaverX
asked on
TCriticalSection not working
Hi,
I made a little test program to test the working of critical sections, but it doesn't give the result I want.
I have 2 forms with each a button on. When clicking buIncrease, the program counts from 0 to 100. When it is counting and the couter is at 50 (eg) , i click on the button on the second form, wich calls the same function of when clicking the first button. The result is that the label laThread1Status displays 0 to 50 and then counts from 0 to 100 (which is done by the second call), and when it reaches 100, it restarts counting from 50 to 100 (which is the first call that is resumed).
The criticalsection should make sure that the first call first has to be completed, no..?
void __fastcall TForm1::buIncreaseClick(TO bject *Sender)
{
int max = 100;
csList->Acquire(); //TCriticalSection
for(int i=0;i<max;i++)
{
laThread1Status->Caption = "running: "+IntToStr(i);
laThread1Status->Repaint() ;
Sleep(250);
Application->ProcessMessag es();
}
laThread1Status->Caption = "finished";
laThread1Status->Repaint() ;
csList->Release();
}
void __fastcall TForm2::Button2Click(TObje ct *Sender)
{
Form1->buIncreaseClick(NUL L);
}
I made a little test program to test the working of critical sections, but it doesn't give the result I want.
I have 2 forms with each a button on. When clicking buIncrease, the program counts from 0 to 100. When it is counting and the couter is at 50 (eg) , i click on the button on the second form, wich calls the same function of when clicking the first button. The result is that the label laThread1Status displays 0 to 50 and then counts from 0 to 100 (which is done by the second call), and when it reaches 100, it restarts counting from 50 to 100 (which is the first call that is resumed).
The criticalsection should make sure that the first call first has to be completed, no..?
void __fastcall TForm1::buIncreaseClick(TO
{
int max = 100;
csList->Acquire(); //TCriticalSection
for(int i=0;i<max;i++)
{
laThread1Status->Caption = "running: "+IntToStr(i);
laThread1Status->Repaint()
Sleep(250);
Application->ProcessMessag
}
laThread1Status->Caption = "finished";
laThread1Status->Repaint()
csList->Release();
}
void __fastcall TForm2::Button2Click(TObje
{
Form1->buIncreaseClick(NUL
}
what is the declaration and initialisation of csList?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
This has more to do with events I think...
how can i force a function to finish before this same function is called by an event...?