Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

The proper way of using the PeekMessage function.

Posted on 1998-01-06
9
Medium Priority
?
304 Views
Last Modified: 2013-11-20
I'm developing a program which includes some background processing. If i want to stop the process through the stop button i've provided for the user, how can i do it. i tried to use the PeekMessage function. But something seems to be missing. Could any one show me the right way? Thank you.
0
Comment
Question by:ketireddys120897
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +2
9 Comments
 
LVL 7

Expert Comment

by:faster
ID: 1313513
If you are using windows 95 or NT, the better way is to create another thread for the background processing, the main thread deal with UI and terminate the worker thread when user cancel the operation.

PeekMessage() is used in 16 bit windows to solve this kind of problem, but it is not a good solution.


0
 

Author Comment

by:ketireddys120897
ID: 1313514
Yeah. Sure that is one way of solving it. But what if i want only one thread running? It should be possible to peek into the message queue in between and process the message.
0
 

Author Comment

by:ketireddys120897
ID: 1313515
Yeah. Sure that is one way of solving it. But what if i want only one thread running? It should be possible to peek into the message queue in between and process the message.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 7

Expert Comment

by:faster
ID: 1313516
What problem do you have now and how do you write your code?

Although PeekMessage() can solve your problem, it is not the recommended way in win32.  Creating another thread will be much simpler.
0
 
LVL 23

Expert Comment

by:chensu
ID: 1313517
"Many applications perform lengthy processing "in the background." Sometimes performance considerations dictate using multithreading for such work. Threads involve extra development overhead, so they are not recommended for simple tasks like the idle-time work that MFC does in the OnIdle function."

If you are using Visual C++ 5.0, you may find the documentation about how to use PeekMessage loop to perform a background task.

Visual C++/Visual C++ Programmer's Guide/Adding Program Functionality/Details/MFC Topics (General)/Idle Loop Processing

For Visual C++ 4.x, you may search for the keywords "PeekMessage" and "OnIdle".
0
 
LVL 3

Expert Comment

by:shaig
ID: 1313518
If you are using MFC:
Your application class ( inherits fro CWinApp ) has an virtual OnIdle function.  override it for idle time proccesing.
Use the ON_MESSAGE macros for catching button messages.
What you described is trivial in MFC, if you have any problems email me.
0
 
LVL 3

Expert Comment

by:shaig
ID: 1313519
Oh... and don't open a new thread just for simple idle time proccessing!
0
 

Author Comment

by:ketireddys120897
ID: 1313520
Thank you very much for the response. I solved the problem in an other way. But it would be great if someone can give me the a few lines of code implementing the PeekMessage function.
0
 
LVL 15

Accepted Solution

by:
Tommy Hui earned 50 total points
ID: 1313521
MSG msg;

while (PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE)
{
  if (GetMessage(&msg))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
}
0

Featured Post

Enroll in October's Free Course of the Month

Do you work with and analyze data? Enroll in October's Course of the Month for 7+ hours of SQL training, allowing you to quickly and efficiently store or retrieve data. It's free for Premium Members, Team Accounts, and Qualified Experts!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Finishing the grid – keyboard support for arrow keys to manoeuvre, entering the numbers.  The PreTranslateMessage function is to be used to intercept and respond to keyboard events. Continuing from the fourth article about sudoku. …
Introduction: Dialogs (1) modal - maintaining the database. Continuing from the ninth article about sudoku.   You might have heard of modal and modeless dialogs.  Here with this Sudoku application will we use one of each type: a modal dialog …
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
In response to a need for security and privacy, and to continue fostering an environment members can turn to for support, solutions, and education, Experts Exchange has created anonymous question capabilities. This new feature is available to our Pr…

618 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question