利用程序的返回值实现控制台程序的界面控制

最近在做和buildbot(一个持续集成工具)相关的程序 ,buildbot有一个特性,就是控制台程序全部不会谈出cmd,只是在后台运行,比如我开一个线程在后台跑,读取串口的数据,然后进行相关的处理,我如果想关闭这个串口,结束这项操作怎么告诉后台的程序呢?如果是正常情况,从键盘输入特定的字符串,或者ctrl+c就可以停止了,但是由于buildbot的自身特性,如果要实现这个功能,可能需要更改许多它本身的结构,这样不合理,而且难度较大,浪费时间。

通过研究我发现,虽然buildbot不能弹出控制台,却能弹出窗口(dialog),那么可不可以利用这点来对后台程序进行控制呢?

于是我写了一个messagebox的程序,如下

//  DownLoadTool.cpp : Defines the entry point for the console application.
//

#include 
" stdafx.h "
#include 
" DownLoadTool.h "


#ifdef _DEBUG
#define  new DEBUG_NEW
#undef  THIS_FILE
static   char  THIS_FILE[]  =  __FILE__;
#endif

/////
//  The one and only application object

CWinApp theApp;

using   namespace  std;

int  _tmain( int  argc, TCHAR *  argv[], TCHAR *  envp[])
{
    
int nRetCode = 0;

    
// initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    
{
        
// TODO: change error code to suit your needs
        cerr << _T("Fatal Error: MFC initialization failed"<< endl;
        nRetCode 
= 1;
    }

    
else
    
{
        
// TODO: code your application's behavior here.
        switch(argc)
        
{
        
case 2:
            
if (strcmp(argv[1],"disable")==0)
            
{                
                nRetCode 
= 1;
                
break;
            }

            
if (AfxMessageBox(argv[1],MB_YESNO, MB_ICONINFORMATION )==IDNO)
                nRetCode 
= 1;
            
break;
        
case 3:
            
if (AfxMessageBox(argv[1],MB_YESNO, MB_ICONINFORMATION )==IDNO)
                nRetCode 
= 1;
            
else
                nRetCode 
= system(argv[2]);                
            
break;
        
case 4:
            
if (atoi(argv[3])==1)
                nRetCode 
= 1;
            
else
            
{
                
if (AfxMessageBox(argv[1],MB_YESNO, MB_ICONINFORMATION )==IDYES)
                    nRetCode 
= system(argv[2]);
            }

            
break;
        
default:
            cout
<<"MessageBox [description] [program]  [disabledialog(=1,disable)]"<<endl;
            nRetCode 
= 1;
            
break;
        }
        
    }

    
return nRetCode;
}



这个程序负责弹出一个messagebox,由参数传入messagebox的提示信息及需要启动的程序,如果启动了其他程序,则返回其他程序的返回值,如果没有启动其他程序,则返回yes(0)no(1)

在python程序和批处理(bat)中可以分别利用os.system()函数和errorlevel来判断该程序的执行情况,这样,就可以控制后台运行的程序了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值