|
Nibu thomas wrote: Is it a Copy/Paste?
It's a deep copy!
Maxwell Chen
|
|
|
|
|
|
ROTFL.
OMG... Im a geek. I actually
a) got the joke
b) found it insanely funny.
Well... I can live with that
|
|
|
|
|
Maxwell Chen wrote: It's a deep copy!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
I want to add a progress bar to my dialog window which start in the thread function and ends after some process can u help me with this.
-------------------------------------------
BOOL CStatusDlg::OnInitDialog()
{
CDialog::OnInitDialog();
HANDLE hr;
hr = CreateThread(NULL,0,(unsigned long (__stdcall *)(void *))WorkerThreadProc,this,0,0);
return TRUE;
}
---------------------------------------------------
UINT WorkerThreadProc(LPVOID Param)
{
CStatusDlg* status = (CStatusDlg *)Param;
// I want the progress bar to start here
INDX.startIndex();
// I want the progress bar to stop here
return true;
}
Thanks
|
|
|
|
|
U have to call the StepIt function for the progress bar to progress each step..
nave
|
|
|
|
|
Thanks for ur response. can u please give me the code to do it? i dont want to display it in status bar
-- modified at 5:25 Friday 19th May, 2006
|
|
|
|
|
UINT WorkerThreadProc(LPVOID Param)
{
CStatusDlg* status = (CStatusDlg *)Param;
status->m_ProgressBar.SetRange( 0, 100 );
// progress barstart here
for( int i =0;i < 100; i++ )
{
status->m_ProgressBar.StepIt();
}
// Iprogress bar stop here
return true;
}
nave
|
|
|
|
|
Mmmhhh, won't have problems with that method ? You are accessing an MFC object from two different threads. I think you will get troubles with (but I'm not sure, I never pass MFC objects across different threads).
Take a look here[^], specifically at the Windows Handle Maps section.
Cédric Moonen
Software developer
Charting control
|
|
|
|
|
I have read that we can pass C++ object to other thread which is derived from CObject. Also we must ensure the existence of the object.
nave
|
|
|
|
|
Hi naveen i tried this code but its not working dont know what is the problem
|
|
|
|
|
|
i have a timer. on click of a button this timer starts.i want the progress bar to start on click of the button and end when the timer is killed
UINT WorkerThreadProc(LPVOID Param)
{
CStatusDlg* status = (CStatusDlg *)Param;
// I want the process bar to start here
INDX.startIndex();
// I want the process bar to stop here
KillTimer(status->m_hWnd, ELAPSED_TIMER);
return true;
}
how to do this?
|
|
|
|
|
Then why r u creating a thread..U can step the progress bar in the OnTimer()
funtion..isn't it?
nave
|
|
|
|
|
this is my ontimer() function. how can i step progress bar here? how do i ensure that the progress bar stops once timer is killed
void CStatusDlg::OnTimer(UINT nIDEvent)
{
CStatusDlg* status = (CStatusDlg *)Param;
if(nIDEvent == ELAPSED_TIMER)
{
time(&lStopTime);
cteElapsedTime = CTimeSpan(lStopTime-lStartTime);
CString csElapsedTime;
csElapsedTime.Format("%02d:%02d:%02d",
cteElapsedTime.GetHours(),
cteElapsedTime.GetMinutes(),
cteElapsedTime.GetSeconds());
if(IsWindowVisible())
{
m_TIME.SetWindowText(csElapsedTime);
}
}
|
|
|
|
|
Before calling the SetTimer initialize the progress bar
m_ProgressBar.SetRange( 0, 100 );<br />
SetTimer( ELAPSED_TIMER );
now in the timer function
void CStatusDlg::OnTimer(UINT nIDEvent) <br />
{<br />
if(nIDEvent == ELAPSED_TIMER)<br />
{<br />
m_ProgressBar.StepIt();<br />
time(&lStopTime);<br />
cteElapsedTime = CTimeSpan(lStopTime-lStartTime); <br />
CString csElapsedTime;<br />
csElapsedTime.Format("%02d:%02d:%02d", <br />
cteElapsedTime.GetHours(),<br />
cteElapsedTime.GetMinutes(),<br />
cteElapsedTime.GetSeconds());<br />
if(IsWindowVisible())<br />
{<br />
m_TIME.SetWindowText(csElapsedTime);<br />
}<br />
}<br />
}
nave
|
|
|
|
|
Thank you naveen for your help. i am getting following errors in
CStatusDlg* status = (CStatusDlg *)Param;
m_Progress_Bar.SetRange( 0, 100 ); time(&lStartTime);
SetTimer(status->m_hWnd,ELAPSED_TIMER, 1000, NULL);
if i comment that line i dont get any errors. in ontimer() function i am using m_ProgressBar.StepIt(); directly but here its not giving any error. what cud be wrong?
error C2065: 'm_Progress_Bar' : undeclared identifier
error C2228: left of '.SetRange' must have class/struct/union type
Thanks
|
|
|
|
|
ho man... m_ProgressBar is the control variable for the progress control
replace m_ProgressBar with the control varaiable u created for the progress bar..
nave
|
|
|
|
|
hey sorry typing mistake. my control variable is m_Progress_Bar.
in ontimer() function this is not giving any error i.e
m_Progress_Bar.StepIt();(no error here).
but this is giving error
m_Progress_Bar.SetRange( 0, 100 );
if i comment m_Progress_Bar.SetRange( 0, 100 ); then it gives no error
|
|
|
|
|
|
error C2065: 'm_Progress_Bar' : undeclared identifier
error C2228: left of '.SetRange' must have class/struct/union type
|
|
|
|
|
From which funtion did u call the
m_Progress_Bar.SetRange( 0, 100 );function?
I think u have called this function from a static function or global funtion or a function in another class..
nave
|
|
|
|
|
yes its in a separate function.whats the solution for this?can i use it without setting the range? the other declaration i.e m_Progress_Bar.StepIt(); is in a different function i.e ontimer() but this isn't giving any error
-- modified at 8:49 Friday 19th May, 2006
|
|
|
|
|
sudeep_br wrote: yes its in a separate function
does this function belong to the same class and a non static one?
if so u should have to pass the pointer of the m_Progress_Bar to this function and then u can access the progress bar from that function
nave
|
|
|
|
|
Hi naveen.Thank You for all your help.
I am performing the operation of file indexing. i am using the timer to keep track of the time taken by the computer to generate file index. when the indexing begins the progress bar will start, since its called in the ontimer() function as suggested by you. but the problem here is that since the progress bar is inside the timer, after indexing is over, when the timer stops,progress bar also stops. sometimes it so happens that the progress bar stops in the middle becoz of calling it in timer. is it possible to ensure that the progress bar doesnt stop in the middle?
|
|
|
|