Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

Udi

VC++ 6.0 question

This topic is 5174 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi All, I have a problem, which I''m guessing is fairly straightforward.. yet so far I''ve been unable to solve it. Any help would be greatly appreciated: I have a VC++ 6.0 console application that is running. I''m trying to stop it by doing Ctrl-C, in order to get to a special mode that will do certain commands based on characters entered. To return to the normal mode, the user will just press #. I AM succcessful in getting to my ''special'' mode, however, everything behaves strangely (for example, it takes quite a while for the CTRL-C to take place, the system("pause") command is not working at all, and when I click CTRL-C twice the application just enters into an infinite loop). What am I doing wrong? Cheers, Udi

Part of my main function:
void main(int argc, char *argv[], char *envp[]) 
{
  SetConsoleCtrlHandler(CtrlHandler, TRUE);
  ...
}

BOOL WINAPI CtrlHandler(DWORD fdwCtrlType) 
{
  switch (fdwCtrlType) 
  {
    case CTRL_C_EVENT:
    cout<<"CTRL_C_EVENT";
    cout<<endl;system("pause");
    Beep( 750, 300 ); 
    control();
    break;

    case CTRL_CLOSE_EVENT:
    cout<<"CTRL_CLOSE_EVENT";
    cout<<endl;system("pause");
    break;

    case CTRL_BREAK_EVENT:
    cout<<"CTRL_BREAK_EVENT";
    cout<<endl;system("pause");
    break;

    case CTRL_LOGOFF_EVENT:
    cout<<"CTRL_LOGOFF_EVENT";
    cout<<endl;system("pause");
    break;

    case CTRL_SHUTDOWN_EVENT:
    cout<<"CTRL_SHUTDOWN_EVENT";
    cout<<endl;system("pause");
    cout << "Signal to quit was received\n";
    system("pause");

    default:
    return FALSE;
  }
  return TRUE;
}

void control()
{
  char ch='' '';
  //cin.get(ch);

  cin>>ch; // both versions work the same

  while (ch!=''#'')
  {
    cout<<"ch="<<ch<<endl;
    //cin.get(ch);

    cin>>ch;
  }
  cin.clear();
}

Share this post


Link to post
Share on other sites
Advertisement
I have no idea what is wrong with your code. However, you might check out SetConsoleMode(), if all you really care about is CTRL-C, and not any of the other events. You can use SetConsoleMode() to turn of system-handling of special inputs. Which means that you can read the inputs yourself, and handle them as you see fit.

Share this post


Link to post
Share on other sites
Have you checked to see if you''re in ''special mode'' before you
call ctrl+c to get into ''special mode''?

-Hyatus
"da da da"

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!