?? main.cpp
字號(hào):
#ifndef _WINDOWS32
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#endif
#include <time.h>
#include "optickettopo.h"
#include <qtextcodec.h>
#include <qapplication.h>
/*初步考慮,
(1)每個(gè)進(jìn)程管理一份數(shù)據(jù),應(yīng)用號(hào)由-app 參數(shù)決定
(2)研究模式要不要同步運(yùn)行方式,需要靠參數(shù)決定
*/
void ExitProcess(int aa=0)
{
printf("exit_process1\n");
exit(0);
}
int main(int argc, char* argv[])
{
#ifndef _WINDOWS32
sigset(SIGHUP,SIG_IGN);
sigset(SIGALRM,SIG_IGN);
sigset(SIGPIPE,SIG_IGN);
signal(SIGINT,ExitProcess);
signal(SIGTERM,ExitProcess);
signal(SIGFPE, SIG_IGN);
#endif
#ifndef _WINDOWS32
#ifdef _ALPHA
long uval = uswitch(USC_GET, 0);
uval = uswitch(USC_SET, uval | USW_CORE);
if (uval < 0)
perror("uswitch");
#endif
#endif
//-------edit by jikun------------
//不加這個(gè)導(dǎo)致圖形名亂碼,無(wú)法更新版本號(hào),必須加QApplication
QTextCodec::setCodecForCStrings ( QTextCodec::codecForName("gbk") );
QTextCodec::setCodecForTr ( QTextCodec::codecForName("gbk") );
QTextCodec::setCodecForLocale( QTextCodec::codecForName("gbk") );
QApplication app(argc,argv,false);
app.setDefaultCodec( QTextCodec::codecForName( "GBK" ) );
//--------end-----------------------------
bool set_ctx_flag=false;
// CContext::SetContextNo(argc, argv,AC_REALTIME_NO);
int app_no=AP_SCADA;
for(int arg = 1; arg < argc - 1; ++arg)
{
if(0 == strcmp(argv[arg], "-app"))
{
sscanf(argv[arg+1], "%d", &app_no);
}
if (!strcmp(argv[arg],"-ctx"))
{
set_ctx_flag=true;
break;
}
}
if (set_ctx_flag)
CContext::SetContextNo(argc,argv);
else
CContext::SetContextNo(argc,argv,AC_REALTIME_NO);
short ctx_no;
CContext::GetContextNo(ctx_no);
if(app_no/1000*1000 != AP_SCADA)
{//非SCADA族應(yīng)用
app_no = AP_SCADA;
}
const char* PROC_NAME = "flow_server";
char proc_alias[32];
sprintf(proc_alias, "%s%d", PROC_NAME,app_no);
CServicesManage serviceman;
CSamPub sam_pub;
if(sam_pub.ProcRegister(app_no, proc_alias, 0) != 1)
{
cerr<<"進(jìn)程注冊(cè)失敗"<<endl;
exit(0);
} vector<int> app_id_vec;
while(serviceman.GetActiveApps(app_id_vec) < 0 || find(app_id_vec.begin(), app_id_vec.end(), app_no) == app_id_vec.end())
{//如果本機(jī)沒(méi)有SCADA應(yīng)用,空轉(zhuǎn),不退出是為了使得在第一次啟動(dòng)應(yīng)用時(shí)也能正常工作
// cerr<<"waiting."<<endl;
DelayTime(1000);
}
//需要發(fā)送變化數(shù)據(jù)報(bào)文標(biāo)志
COpticketTopo m_opt_topo(app_no);
m_opt_topo.Init();
int duty_tag;//add by xuxianfeng 1201
while(1)
{
if(serviceman.GetActiveApps(app_id_vec) < 0 || find(app_id_vec.begin(), app_id_vec.end(), app_no) == app_id_vec.end())
{//如果本機(jī)SCADA應(yīng)用停止,退出
printf("如果本機(jī)SCADA應(yīng)用停止,退出\n\n");
DelayTime(1000);
}
duty_tag=serviceman.IsOnDuty(app_no);//add by xuxianfeng 06-1-4
if((m_opt_topo.RecvReport(2000))==1 )//modify by xuxianfeng 1201
{
printf("接收到消息,msg_type====%d,duty_tag ===%d\n",m_opt_topo.GetRecvReportType(),duty_tag);
switch(m_opt_topo.GetRecvReportType())
{
case OPTICKET_COPY_MODE_REQ:
{
printf("開始拷貝方式數(shù)據(jù)\n");
m_opt_topo.CopyModeFromSCADA(duty_tag);
break;
}
case OPTICKET_DOWN_MODE_REQ:
{
printf("開始下裝模型\n");
m_opt_topo.DownloadModel(duty_tag);
break;
}
//設(shè)備狀態(tài)變化
case OPTICKET_READ_DEV_MODE_REQ:
{
m_opt_topo.ReadDevRunMode(duty_tag);
break;
}
//潮流校核
case OPTICKET_FLOW_REQ:
{
m_opt_topo.OptFlowVerify(duty_tag);
break;
}
default:
{
break;
}
}
}
DelayTime(200);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -