|
Chris Losinger wrote: pretty much. but Sleep simply isn't that accurate. Sleep uses the system clock, which has a resolution closer to 15ms per tick in most modern versions of Windows. and, it's entirely possible for your sleeping thread to get preempted by another thread, further delaying its awakening.
In that case, what do I use to loop posting of a message?
|
|
|
|
|
honestly, i don't know. Windows really isn't a real-time OS, and as far as I know, there's not a lot of high-level support for the kind of timing precision you seem to want. maybe you could check an open source game or audio application (ex. Audacity) that you could plunder for ideas.
|
|
|
|
|
|
acerunner316 wrote: I am using Sleep(10) in my thread to post a windows message every 10ms.
Sleep(10) doesn't sleep your thread fro 10 ms, as windows is not realtime system... actually it sleep time range between 10 ms to 54 ms depending on current load on the system and processor speed
"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
Support CRY- Child Relief and you
|
|
|
|
|
Generally Windows NT and later have a timer interrupt of 10ms. However the HAL for some systems has set it to use 15ms. This means you can't sleep for less than that amount using the timeouts for Sleep() and Wait...() calls.
Anyone who thinks he has a better idea of what's good for people than people do is a swine.
- P.J. O'Rourke
|
|
|
|
|
1. Are you sure your function which is posting message takes '0'ms to execute ?
I raise this question because, if your calling code has a lot to do and then sleep 10 ms, the interval between subsequent calls would be
(Sleep time + Time taken to execute other part of the function).
If you are very specific about the response time, i dont think post message is the right way to address such issuesbecause the latency of the response is not guaranted.
You can use Events or a Semaphore-give-release technique to decrease the latency further.
but the technique you need to choose depends on your applcation.
Haribabu.
|
|
|
|
|
I don't know if it takes 0ms, but there is nothing else to my code other than repeatedly posting messages.
UINT CNOx1000MonitorDlg::FThreadLoop (LPVOID PptrToClass)<br />
{<br />
CMainWindowDlg *LptrClass = static_cast<CMainWindowDlg *>(PptrToClass);<br />
HWND *ptrWindowHandle = new HWND;<br />
*ptrWindowHandle = LptrClass->GetSafeHwnd();<br />
<br />
while(LptrClass->mbolThreadExecute)<br />
{<br />
::PostMessage(*ptrWindowHandle, WM_UPDATE_CONTROLS, 0, 0);<br />
::Sleep(10);<br />
}<br />
delete ptrWindowHandle;<br />
return 0;<br />
}
|
|
|
|
|
acerunner316 wrote: but 6ms delay is still way too slow
To get an understanding of how time works read Time is the Simplest Thing[^]
I'd love to help, but unfortunatley I have prior commitments monitoring the length of my grass. :Andrew Bleakley:
|
|
|
|
|
I've been looking at Microsoft's Expression Blend[^] the past couple of days and have read this article : .NET 3.0 WPF Tools && Examples[^].
We currently have a legacy MFC based application that does a lot of GDI rendering. What I would like to be able to do is embed an Expression Blend composition within our application and dynamically control the properties of the rendering through the wrapping app.
E.g. The Expression Blend composition is showing a red car rotating and the user chooses blue from our app, I'd like to dynamically change the render to blue.
Has anyone looked at embedded any XAML based creations within their own legacy MFC based apps?
Thanks in advance.
-- modified at 16:10 Thursday 4th January, 2007
Looks like Nish may have done some work in this area?
|
|
|
|
|
can someone explain what im doiing wrong here:
<br />
HBRUSH backBrush = ::CreateSolidBrush(RGB(pLevels->frequency[0][0],0,0));<br />
<br />
HDC memDC = CreateCompatibleDC ( hdc );<br />
HBITMAP bitmap1 = CreateCompatibleBitmap(memDC,prc->left,prc->bottom);<br />
HBITMAP oldBitmap = SelectObject(memDC,bitmap1);<br />
<br />
::FillRect(memDC,prc,backBrush);<br />
::Ellipse(memDC,20,20,120,120);<br />
::BitBlt(hdc,0,0,prc->left,prc->bottom,memDC,0,0,SRCCOPY);<br />
<br />
::DeleteObject( backBrush );<br />
::SelectObject(memDC, oldBitmap);<br />
::DeleteObject(bitmap1);<br />
::DeleteDC(memDC);<br />
It just doesnt display anything.
|
|
|
|
|
Is prc->left what you intended as the bitmap width in the call to
CreateCompatibleBitmap(memDC,prc->left... ??
It's used in BitBlt too...
Mark
|
|
|
|
|
|
ceejeeb wrote: yes it is the width
If that's the case then how will this work...
::FillRect(memDC,prc,backBrush);
Are you sure you don't mean to use prc->right?
Mark
|
|
|
|
|
ahh yes my mistake it was menat to be right.
Now its draws to the screen but not as intended the back background is dotted black and white.
|
|
|
|
|
try changing
HBITMAP bitmap1 = CreateCompatibleBitmap(memDC,prc->left,prc->bottom);
to
HBITMAP bitmap1 = CreateCompatibleBitmap(hdc,prc->right,prc->bottom);
The default bitmap for a dc is monochrome - you want a bitmap compatible with the original dc.
|
|
|
|
|
Thanks alot mark all is working fine now. Big Help.
|
|
|
|
|
I have a CTreeCtrl and an associated CImageList. Is there any way I can load images into the CImageList at runtime (e.g. from an .ico file supplied by the user) without them being hardcoded into the executable files ?
-- modified at 14:21 Thursday 4th January, 2007
cheers,
Neil
|
|
|
|
|
You can add/remove images from image lists dynamically.
Check out CImageList::Add() (::ImageList_AddIcon()), ::LoadImage(), etc.
Mark
|
|
|
|
|
Yes - although if dealing with a lot of images it is better to initially size the ImageList control to hold a bunch of images.
The CImageList::GetImageInfo(...) function or the ImageList_GetImageInfo(...) macro can be used to write data into the images maintained by the ImageList control.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
see
here
Note: you can dynamically load an image using the LoadImage API.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Yes you have many good function in CImageList Add,Remove,Replace
|
|
|
|
|
Thanks to everyone for the posts.
I know these functions, but they don't realy explain how to load icons from files or "external" data sources - this is what I meant by dynamic (the icons aren't already hardcoded as resources in the executables). I found the functions I was looking for, which are:
ExtractIcon() - load icon from disk
CreateIconFromResourceEx() - load icon from memory
Sorry, I think I should have explained what I was after a bit better..
cheers,
Neil
|
|
|
|
|
I think you need to SHGetFileInfo to get information about file and... and also if you dont know about CImageList and its functions search on the codeproject it has a lot of good articles
|
|
|
|
|
Good afternoon,
I would like to restrict access to Windows in my program. More especifically, I want to block some "key combinations" (Ctrl-Alt-Del, Alt-Tab, Windows key). Until now, I did not find anything to help me.
Can someone help me?
Thanks for the attention,
Paulo Cezar
PCFilho
Rio de Janeiro, Brazil
|
|
|
|
|
Maybe you can use SetWindowsHookEx(WH_KEYBOARD,...) and eat the keyboard messages.
|
|
|
|