• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 365
  • Last Modified:

TimeProc

Hi.. another multimedia time question... I have a dialog based MFC with a static control that I want to change every time the multimedia timer changes. I had this in the TimeProc

CStatic* staticctrl = (CStatic*) GetDlgItem(IDC_STATIC_TEST);
staticctrl->SetWindowText("Low");  

And I have had grief with the GetDlgItem because of some parameters.
Is there a way to fix this?
Also, If fix it by posting a message in TimeProc with PostMessage, what priority would it have because it is time critical and I want the highest accuracy?
0
rose3377
Asked:
rose3377
  • 3
  • 2
1 Solution
 
nietodCommented:
Your message will be given high prioroty in the message queue, but that doesn't matter because PostMessage is assynchronous so the message is not likely to be handled very quickly.  

SendMessage would be better, but the prolem is that the program could be waiting for  another sendmessage to return, in which case your sendmessage can't be processed so the message will be ignored.

If you need timely processing, then you had better forget using messages.  What are the problems you are trying to solve?
0
 
rose3377Author Commented:
I have a program generating a pulse train to my hardware. The pulse has to have an exact period. Timing is critical! How do I achieve this then? I needed the GetDlgItem so that a static control on the dialog box will alternate saying high-low-high-etc.
0
 
nietodCommented:
NT is far superior to windows 95/98 but it is not a real-time system.  Depending on how critical the timing is you may not be able produce the signal you need.   A more typical solution would be to use NT to control (turn on or off) a hardware signal generator.

You should be able to use GetDlgItem etc you haven't explained what troubles you are having with it.  However, That sort if thing is likley to be slow, how long is your timer event?  Also since the timmer procedure is called asynchronously, you do need to take procautions to syncronize access to shared data, like the dialog item etc.
0
 
rose3377Author Commented:
The problem with GetDlgItem is that my error says that I am calling a non-static function in a static function, since the callback function of a multimedia timer is static. Is there a way around this problem?
0
 
nietodCommented:
Sure.  2 main ways.

I assume what you need is a pointer to the parent window of some control (or just a pointer to that control.  Well you need a pointer to some object, you'll know which)  The easiest way is if there is just one of these objects (i.e. just one parent window in the program--something like that) then you can store a pointer to this object in a global variable and cll the functions you need using this pointer.

However,  if there are more than one of these objects floating around, (i.e if some timer calls will need one pointer and others will need a different one) then you can use dwUser parameter of the timeSetEvent() procedure to pass the pointer you need.  i.e when you call timeSetEvent() to set the timer, pass a pointer to the object to be used.  When your timer procedure is called the dwUser parameter will contain this pointer.  Your timer procedure can convert this pointer to a pointer of the right type and call the appropriate member function.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now