What are the difference between GetMessage() and PeekMessage()?

in SDK program?

Thanks,
Rjn

0
12/11/2006 10:34:56 AM
vc.mfc 33608 articles. 0 followers. Follow

3 Replies
1371 Views

Similar Articles

[PageSpeed] 53

> in SDK program?


GetMessage essentially waits for any message to be placed in the queue
before it returns.  On other hadn, PeekMessage function does not wait.
That means GetMessage can block until the message appears in the queue.

---
Ajay

0
ajaykalra (6842)
12/11/2006 2:53:44 PM
In addition, it is nearly always the case that the use of PeekMessage indicates an
architectural failure in the design.  There are reasons to use PeekMessage, but most of
the time when it is done, it was because the programmer was trying to do some long
computation which blocked the GUI thread and is trying to make sure that user interaction
is handled.  This is an old Win16 idiom (where it was necessary), but no new code should
be written using this technique; instead, threads should be used for long computations.
Besides producing very convoluted code, which sometimes doesn't even work right,
PeekMessage actually imposes some significant overheads which serve to slow the
computation down.  Possibly by a small percentage, possibly by a large multiplier,
depending on how badly done it is.  I use the presence of PeekMessage as a strong
indicator that there is a serious design problem in the application.  It is often account
for by people who never outgrew Win16.

There are a few interesting valid reasons for using PeekMessage, but its correlation to
bad design is incredibly high.
				joe

On 11 Dec 2006 06:53:44 -0800, "Ajay Kalra" <ajaykalra@yahoo.com> wrote:

>> in SDK program?
>
>
>GetMessage essentially waits for any message to be placed in the queue
>before it returns.  On other hadn, PeekMessage function does not wait.
>That means GetMessage can block until the message appears in the queue.
>
>---
>Ajay
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
0
newcomer (15973)
12/11/2006 5:31:04 PM
"Joseph M. Newcomer" <newcomer@flounder.com> wrote in message
news:885rn2lh32q416h6fq3furrgoqeovtvnlf@4ax.com...
> In addition, it is nearly always the case that the use of PeekMessage
> indicates an
> architectural failure in the design.  There are reasons to use
> PeekMessage, but most of
> the time when it is done, it was because the programmer was trying to do
> some long
> computation which blocked the GUI thread and is trying to make sure that
> user interaction
> is handled.  This is an old Win16 idiom (where it was necessary), but no
> new code should
> be written using this technique; instead, threads should be used for long
> computations.
> Besides producing very convoluted code, which sometimes doesn't even work
> right,
> PeekMessage actually imposes some significant overheads which serve to
> slow the
> computation down.  Possibly by a small percentage, possibly by a large
> multiplier,
> depending on how badly done it is.  I use the presence of PeekMessage as a
> strong
> indicator that there is a serious design problem in the application.  It
> is often account
> for by people who never outgrew Win16.
>

It is true this kind of GetMessage loop can cause re-entrancy issues, but I
wish Windows had a better way of pumping messages while an event handler
waits for a long process to end.  As it is, it's mighty inconvenient.  For
example, this simple code:

CMyWnd::OnMyHandler(WPARAM wParam, LPARAM)
{
    ExecuteLongProcess();

    // Pump messages to UI remains responsive until long process ends
    do
    {
        if ( PeekMessage() )
       {
            GetMessage();
            DispatchMessage();
       }

        Sleep (100);
    } while ( LongProcessIsStillRunning() );

    // Continue event handling after long process completes
    AfxMessageBox ("Long process has completed while not freezing up your
entire window");
}


needs to be replaced with:

CMyWnd::OnMyHandler(WPARAM wParam, LPARAM)
{
    // Start long process on it's own thread
    AfxBeginThread (  LongProcessThread, GetSafeHwnd() );
}


static UINT  CMyWnd::LongProcessThread(LPVOID pParam)
{
    ExecuteLongProcess();

    // Notify main thread that long process is done
    ::PostMessage ( (HWND)  pParam, UWM_MYWND_LONGPROCESS_DONE );
}


CMyWnd::OnLongProcessDone(WPARAM wParam, LPARAM)
{
    // Continue event handling after long process completes
    AfxMessageBox ("Long process has completed while not freezing up your
entire window");
}






0
dc2983 (3206)
5/1/2007 4:35:58 PM
Reply:

Similar Artilces:

Pulling data daily from a differently named report everyday
Hello, I have a spreadsheet where I use formulas to pull data from multiple reports on a shared server everyday. What I do is to save those reports under a certain name everyday since the formulas have to have the static report name in them to pull data. (For example, A1 may pull data from c:\reportfolder\reportA, B1 may pull from c: \reportfolder2\reportB, etc). In these report folders our IT group runs a new report in it everyday but of course they change the name of the report every day (to reflect the date) . . so in the reportfolder there will be "reportA-3-12-2009", and "...

Different margins on different pages
I am setting up a template for letters at work. The first page of our letterhead has one ste of margins and all subsequent pages will have a different sent of margins. I know that section breaks can be used, but if staff copy and paste text from existing letters into this new template, the section break moves. Is there any way of locking the section break to the page? so the pasted text goes over the top of it? Hi Lilly80, You could setup your document with a 'different first page' layout. That allows the first page to have a different set of margins to the rest o...

Different values for error bars in series
In Excel 2007, how do you put in different error bar values for each data point in a series? So far I am only able to put in one value for all in my bar chart. Hi, See Jon's blog on the subject. http://peltiertech.com/WordPress/error-bars-in-excel-2007/#comments Cheers Andy On 06/04/2010 15:52, wdwind1 wrote: > In Excel 2007, how do you put in different error bar values for each data > point in a series? So far I am only able to put in one value for all in my > bar chart. -- Andy Pope, Microsoft MVP - Excel http://www.andypope.info ...

A Different CRM for GP
Hello, We are pondering the idea of implementing MS Dynamics CRM. However, I am curious whether anyone else has had success in integrating a different CRM product with GP 10.0. It's not that we don't like the MS product; I just like to ensure I have covered all bases. Our partner does not have any other recommendations as they have not worked with any other CRM applications. Any information would be greatly apprecaited. Thank you, -- Jessie GoldMine is a good product, very mature, and easier to maintain table structures. There are links to GP but I cannot remember the fir...

Same column, different cell width at different row
I have tried inserting a break and split, didn't work. I just want to separate the top half of a page with the bottom half so I can apply different cell width on the same column. Or how would I be able to do this? Same column but different cell width. Thanks! Glenn You can't do that. -- Cordially, Chip Pearson Microsoft MVP - Excel Pearson Software Consulting, LLC www.cpearson.com "Glenn Chung" <GlennChung@discussions.microsoft.com> wrote in message news:20746997-9D99-4684-A352-120370D27036@microsoft.com... >I have tried inserting a break and split, di...

2 users access calendar online with different rights
hi user A wants to give user B permission to see, add and edit entries in calendar online http://www.exchangedomain.ch/usersname/kalender/ user B is able to see, but not to add or edit entries at the moment in outlook itself its working. user B can open the folder calendar of user A and make entries and change entries what have to be done that this is possible also with web access exchange ? thankx mike schwarz On Thu, 26 Oct 2006 14:09:29 +0200, "Mike Schwarz" <ctek@ctek.ch> wrote: >hi > >user A wants to give user B permission to see, add and edit entries in &...

Fixed Assets
When using the Fixed Asset module, I am finding some small differences when compared to the Depreciation calculated by the External Accountants for tax purposes. Client would like to match exactly to the amounts calculated by external accounts. What is the best way to fix this issue? thanks, -- Patti Need more info Patti. What are the depreciation methods/settings that are creating the differences? Does this occur on every asset or just some? Frank Hamelly MCP-GP, MCT, MVP East Coast Dynamics www.eastcoast-dynamics.com get your gptip42today at www.gp2themax.blogs...

Dates Difference
Hi, I need to get the difference between 2 dates (in number of days), how do i get that in vc++? I have used the DateDiff function in asp but couldn't find anything like that. Also, how can i convert string to a date? thanks in advance karan >I need to get the difference between 2 dates (in number of days), how >do i get that in vc++? Karan, Convert (if the dates aren't already in this format) the dates/times to FILETIME and subtract the values. >Also, how can i convert string to a date? Try COleDateTime::ParseDateTime or VarDateFromStr. Dave -- MVP VC++ FAQ: http://ww...

Want to display value and difference on one chart
I am trying to create a chart that displays x and 10-x on the same chart. I want the chart to show a meaured value and the difference of that value to 10 in a different color. On Wed, 6 Aug 2008, in microsoft.public.excel.charting, JMH <JMH@discussions.microsoft.com> said: >I am trying to create a chart that displays x and 10-x on the same chart. I >want the chart to show a meaured value and the difference of that value to 10 >in a different color. Use your spreadsheet to calculate the values, then use the chart to graph them. Never try to use a chart for calculation. ...

Sending from 2 different computers
I have Outlook 2003 on my desktop at home and 2002 on my laptop while traveling. My server is Comcast. I would strongly prefer to use Outlook (rather than Comcast's webmail) on both computers. I have configured Outlook on both computers to receive email. I can also leave a copy on the server so it can be downloaded again later on the other computer, assuring that I always have copies of all emails no matter which computer I'm using. Problem is I can't send from my laptop. I've tried Comcast's instructions for configuring Outlook 2002 for use while traveling, but it doesn&...

Different shape width in different views in Excel 2007??
In Excel 2007, I create a shape in "Normal" view and set its width to any value (e.g. to 15cm). Now I change to "Page Layout" view and guess what... the width now shows up as something more than 16cm??! (The width property as points in VBA changes accordingly.) Switching to "Page Break View" will result in one more different width value. Is this "just" a big bug in Excel 2007 or did I miss something?? I know that the selected default printer or the chosen zoom factor may have an influence on the shown size of a shape, but these discrepancies are ...

appointment prints different time
Hi, My client uses a french CRM with date format dd/mm/yyyy. when he creates an appointment with the SFO client from e.g. 11 o'clock until 16 o'clock it is saved like correctly. but when he prints it out, the starttime is 8 o'clock and end time 13 o'clock. it is like that for every appointment. it always prints out 3 hours earlier. Anybody had this too? Thanx Cypress, You can check if both the server and the user are in the same time zone. Server: Open Control Panel, Date and Time, Timezone Client: On the laptop open Control Panel, Date and Time, Timezone Open CRM vi...

Different Columns on different pages
Hi - think this will be easily resolved but I am stuck! In publisher 2000 how do you create a multipaged, two page spread that has different columns on some pages. I keep bringing myself back to "ignore background" and trying to use "arrange" - "layout Guides" - but this isnt right. Am I thinking too deep? Is the whole point that the layout guides are simply guides and stay the same thorugh the whole document regardless.... you just use ruler guides to make the changes through the different pages? Any idea's? Thanks Julia ...

Difference 05-21-04
What is the difference between CRM standard and professional? -Johnny Johnny wrote: > What is the difference between CRM standard and professional? > > -Johnny Does it have anything to do with Outlook integration? -- - I am Johnny! Your Internet penpal. I have a scooter, how about you? "Johnny" <alphascooter-verizon@yahoo.com> wrote in message news:evfBJNwPEHA.3708@TK2MSFTNGP10.phx.gbl... > Johnny wrote: > > > What is the difference between CRM standard and professional? > > > > -Johnny > Does it have anything to do with Outlook inte...

divs are different in different browsers
I just ran accross something strange. I tried to used "Div Tags" instead of tables. So it looks something liket his: <div> <div></div><div></div> <div></div><div></div> <div></div><div></div> </div> It looks great in Internet Explorer, but firefox and chrome destroy it. Can anyone let me know on what to look for within the css or layout of the divs to make it work proper. Or in this case...is it just best to go back to tables within 1 div tag. Like this: <div> ...

Compare and Merge Two different CRM Instances
We have two different CRM environments that we want to merge into one. My first step was to try and compare the different instances to see what the different were between them. I exported all of the customizations from each and performed a diff. Yuck. Since the customizations don't export the elements in the same order it looks like their are over 7,000 differences between the two files. Reality says that at best there may be 50-100. Is there any way to get these to output in the same order so that I can get a more realistic diff between them? The only other thought I have at this po...

searching different files macro
I need to search for a certain asset number in the asset column in man different excel files. If the asset number does exist it should copy paste the whole row into a new sheet and build on that sheet . all th excel files have the same columns but different data. i am looking for a macro or any other way to automate this thank yo -- Message posted from http://www.ExcelForum.com Hi see Excel.programming P.S.: please don't multipost -- Regards Frank Kabel Frankfurt, Germany > I need to search for a certain asset number in the asset column in > many different excel files. If ...

OWA on a Different Server
I have an Exchange 5.5 Server and a separate Web server that hosts the Exchange OWA. I recall there was a setting that had to direct it to your exchange server. Could someone please point me in the right direction? I think it's a file that is created during setup but since we moved servers it is still pointing to the old server. I need to know what file to edit to point to the new server. BTW:Please ignore my post in exchange2000.admin. I clicked too quick. "Chris Cairns" <ccairns@hampton-hampton.com> wrote: >I have an Exchange 5.5 Server and a separate Web se...

Hide/Show different instance of CDialogBar
Hi all, I am quite new to MFC, I need help in this topic. I create in my FrameWnd, in the OnCreate multiple CDialogBar which represent the same status bar but naturally with different content, with this code (m_wndStatusBar is the array of my class that derives from CDialogBar): for(int i=0; i<nTotalCodAbi;i++) { if (!m_wndStatusBar[i].Create( this, IDD_STATUS_BAR, CBRS_BOTTOM, IDD_STATUS_BAR )) { return -1; // fail to create } m_wndStatusBar[i].SetBarStyle(m_wndStatusBar[i].GetBarStyle() | CBRS_TOOLTIPS ); //Inizializzazione m_wndStatusBar[i].Init(this); //only ...

Workbook with different queries on each worksheet
I have several workbooks to which I copy the current spreadsheet to create a new one. Then I edit the query to the database (only on the new worksheet) to reflect a different time period. In 2003 it was a breeze, I just editted the query , saved it and returned the data to the worksheet. Piece of cake. In 2007, the onnly way I have found to do this is to open the properties of the connection, change tabs and select edit query , make changes and return data and OK my way out of the all the pop-ups. IS there an easier way to do this? Why are the external connection options grayed out? Sh...

Rounding Difference on Historical ATB
On some Multi Currency Sales transactions when sales discounts are taken there is a rounding difference of .01 . The CURTRXAM for these invoices = 0 in the originating currency but can be .01 or -.01 in the functional currency .. This invoice and the payment will show on the Multi Currency Historical ATB forever even though the originating amount owing is 0 because the functional amount is + or - .01 ? This .01 does not show if you run the ATB with Options but only on the Historical ATB. Does anyone know a SQL script or some way of removing or changing these items so that they do no...

Automating Different Survey Results
Does anyone have any idea on how to facilitate the preparation of surve results? Our survey results are downloaded from our survey online facility (som facility when it can't even produce the report :sigh:). These survey are about the services of the different support groups of our company So each survey has its own set of questions. The backend process o translating these results is quite tedious and I've been thinking o how to automate it ... I know that there is a better way. I am usin Excel but only the standard features such as countif, sumproduct pivot, charts. But still it c...

I did it too- something different
For the first time in almost a decade, I have put together a website. It's a work in progress and I am trying to keep it simple - no Flash, animated graphics, ornate backgrounds. It's all about stuff happening in my realm, something like a one-stop site for people in my circulation area. The address is www.mcvcourier.com If you have any comments, please let me know. (I know, Off-topic!) Mike Hey, Mike, looks pretty good to me... Did you use Publisher? I had forgotten you were in Cincinnati. You will have to look up my son if you ever get to UC. He is an adjunct professor and ...

Different Receipts for Different Tenders
I would like to be able to choose a different receipt depending on the tender? For example Cash transactions would not print a receipt, Credit Card transactions would print to a 40 column printer while House Accounts would print to an 80 column printer. I would also like to be able to choose the same for tenders on Quotes, Layaways and Work Orders. ---------------- This post is a suggestion for Microsoft, and Microsoft responds to the suggestions with the most votes. To vote for this suggestion, click the "I Agree" button in the message pane. If you do not see the button, ...

VBA
Hi, I am trying to find a way of determining whether variables (in a large array of 35000 data points, defined as Single) are actually blank or are really zero. I appreciate that numeric variables default to 0. In my case, I dimension my large array as single, then set it equal to a range. The range will contain empty cells (perhaps up to half the time), signifying missing data, but may also contain data values that are 0. I want to distinguish between these possibilities. I appreciate that I could declare the array as variant or string, then test to see if individual elements are blan...