|
You can use CreateWaitableTimer. It will create a timer that uses events.
|
|
|
|
|
I Guess using CreateWaitableTimer with SetTimer and WaitForSingleObject may block ur thread !
Cause is my effort;
Effect is God's effort
|
|
|
|
|
You can't use WaitForSingleObject you have to use MsgWaitForMultipleObjects then Dispatch the message to the other controls while you wait on the timer.
|
|
|
|
|
If you feel teh timer function takes alot of time .then You can do this .
Wherever_Timer_creation_required
{
setTimer(X,Y,MULL)
pthread=AfxCreateThread();
}
OnTimer()
{
pthread->PostThreadMessage(Message)
}
Now you can handle that message in pthread .
Cause is my effort;
Effect is God's effort
|
|
|
|
|
Use SetTimer() and OnTimer()
Danny
The stupidity of others amazes me!
|
|
|
|
|
SetTimer will work just fine. Pass NULL as the HWND and specify a TimerProc callback function.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" - mYkel - 21 Jun '04
"There's not enough blatant self-congratulatory backslapping in the world today..." - HumblePie - 21 Jun '05
Within you lies the power for good - Use it!
|
|
|
|
|
Thanks
but i have already tried the SetTimer
i have only one option that i didnot wanted
to opt that is create a thread.
|
|
|
|
|
Ok, I misunderstood your question. I thought you were wondering how to set up a timer in a non-ui thread that did not have a window available to handle the WM_TIMER message.
If your timer function is so lengthy that it interferes with the responsiveness of the UI then your only option is to use a seperate thread for it.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" - mYkel - 21 Jun '04
"There's not enough blatant self-congratulatory backslapping in the world today..." - HumblePie - 21 Jun '05
Within you lies the power for good - Use it!
|
|
|
|
|
How will I going to know if a thread is already done on its process? bec what I use is to put a AfxMessageBox at the end of the threaded function.
How will I terminate it prematurely, without waiting for it to finish its task?
--thanks
|
|
|
|
|
benjnp wrote: How will I going to know if a thread is already done on its process?
Right before the secondary thread is about to end, have it post a message to the primary thread. Having the primary thread periodically poll the secondary thread is not a good idea and goes against being asynchronous.
"Take only what you need and leave the land as you found it." - Native American Proverb
|
|
|
|
|
can you show me a snippet of sending a message from the secondary thread to the primary thread?
|
|
|
|
|
PostThreadMessage(PrimaryThreadId, MyThreadMessage, 0, 0);
|
|
|
|
|
where can I get this PrimaryThreadID? is PrimaryThread ur talking to is my class who calls the secondary worker thread?
what is the possible MyThreadMessage? will it be "NULL"
-thanx
|
|
|
|
|
Yes, the primary thread ID is the main thread of your application.
You can call GetCurrentThreadID from the main application thread to determine its identifier.
I usually use RegisterWindowMessage() to get a unique message identifier to share between threads, unless I need a know one ast compile time to use in a switch statement.
|
|
|
|
|
See these two links:
http://flounder.com/workerthreads.htm
http://flounder.com/uithreads.htm
"Take only what you need and leave the land as you found it." - Native American Proverb
|
|
|
|
|
You can call GetExitCodeThread on the thread's handle. If it returns STILL_ACTIVE as the code then the thread is still running.
You can also use WaitForSingleObject on the thread's handle to wait until the thread is finished.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" - mYkel - 21 Jun '04
"There's not enough blatant self-congratulatory backslapping in the world today..." - HumblePie - 21 Jun '05
Within you lies the power for good - Use it!
|
|
|
|
|
is it like this?
CWinThread *myThread = AfxBeginThread....
while(GetExitCodeThread(myThread) == STILL_ACTIVE)
{
....
}
|
|
|
|
|
No. First off you are using GetExitCodeThread wrong, look it up in MSDN. Second, as David said above, constantly polling the thread is not a good thing to do.
Stops the caller thread until the new thread finishes:
CWinThread *myThread = AfxBeginThread(...
WaitForSingleObject(myThread->m_hThread, INFINITE);
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" - mYkel - 21 Jun '04
"There's not enough blatant self-congratulatory backslapping in the world today..." - HumblePie - 21 Jun '05
Within you lies the power for good - Use it!
|
|
|
|
|
Hi,
i want to reduce the size of the CFileDialog(or any Common Dialog) i mean i need to compress(Shrink it ) it so it looks small.
Regards
FarPointer
|
|
|
|
|
MoveWindow() for example ....
SkyWalker
|
|
|
|
|
MoveWindow may not work ,if you are using DoModal ()directly on a object of CFileDialog
Inherit a class from CFileDialog and over -ride the OnInitdialog .Now include the MoveWindow()
Cause is my effort;
Effect is God's effort
|
|
|
|
|
If you didn't want to inherit the class and override OnInitDialog, you could probably just declare the dialog, say CFileDialog myDialog and then call myDialog.CalcWindowRect() and pass the resulting RECT or CRect structure into myDialog.Create() . This is how the framework already sets up the window size prior to creation, but if you do some of it yourself, you can change the RECT or CRect structure in between to whatever size you wish.
I've never actually tried this myself in practice, but reading through the documentation, it should work. Check out MSDN.
Danny
The stupidity of others amazes me!
|
|
|
|
|
I guess this method won't work as the HWND of the CFileDialogis not yet created !
(Worst case - try with Hooks ) .
Install a hook before Do Modal ()
Handle the Hook for it and delete the hook after that .
Cause is my effort;
Effect is God's effort
|
|
|
|
|
The method I noted in my post only handles a CRect or RECT structure, so you don't need the window to be created yet, but yes, your method, Raaja, would require the window to be created already.
Danny
The stupidity of others amazes me!
|
|
|
|
|
CFileDialog myDialog
myDialog.CalcWindowRect()
myDIalog.create ....
If this is what you have suggested ,then CalcWindowRect () call is going to fail as the window is not yet created !
Check for the Assert statement in CWnd ::GetExStyle() which is accessed in CalcWindowRect()
Cause is my effort;
Effect is God's effort
|
|
|
|