123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #include "mainwindow.h"
- #include <QApplication>
- #include <QSharedMemory>
- #include <QMessageBox>
- #include <string>
- #include "ivlog.h"
- #include "ivbacktrace.h"
- std::string gstrxmlpath;
- std::string carStatePath;
- std::string locateInfoPath;
- iv::Ivlog * ivlog;
- iv::Ivfault * ivfault;
- #define USE_ONEIVSYSMAN
- extern bool gbOneThreadRunning ;
- extern bool gbOneThreadRun ;
- void threadOne(QSharedMemory * pshare,int ncount)
- {
- while(gbOneThreadRun)
- {
- pshare->lock();
- int * pdata = (int *)pshare->data();
- if(*pdata != ncount)
- {
- *pdata = ncount;
- qDebug("another thread want running.");
- }
- pshare->unlock();
- std::this_thread::sleep_for(std::chrono::milliseconds(10));
- }
- gbOneThreadRunning = false;
- }
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- #ifdef USE_ONEIVSYSMAN
- QSharedMemory shareMem("IVSysMan_Count");
- int ncount = 0;
- bool bHaveAnother = false;
- if(shareMem.attach())
- {
- shareMem.lock();
- int * pdata = (int *)shareMem.data();
- ncount = (*pdata)+1;
- qDebug("now IVSysMan_Count is %d",ncount);
- *pdata = ncount;
- shareMem.unlock();
- std::this_thread::sleep_for(std::chrono::milliseconds(100));
- shareMem.lock();
- pdata = (int *)shareMem.data();
- if(*pdata != ncount)
- {
- qDebug("Another IVSysMan Running");
- bHaveAnother = true;
- }
- *pdata = ncount;
- shareMem.unlock();
- }
- else
- {
- shareMem.create(100);
- shareMem.lock();
- int * pdata = (int *)shareMem.data();
- *pdata = 1;
- qDebug("now IVSysMan_Count is %d",*pdata);
- shareMem.unlock();
- }
- if(bHaveAnother == true)
- {
- QMessageBox::warning(NULL,"Warning","Another IVSysMan Running.",QMessageBox::YesAll);
- return 0;
- }
- void * ponethread = new std::thread(threadOne,&shareMem,ncount);
- (void *)ponethread;
- #endif
- RegisterIVBackTrace();
- ivlog = new iv::Ivlog("IVSysMan");
- ivfault = new iv::Ivfault("IVSysMan");
- if(argc>1)
- {
- gstrxmlpath = argv[1];
- if(argc>3)
- {
- locateInfoPath = argv[2];
- carStatePath = argv[3];
- }
- }
- else
- {
- gstrxmlpath = "./IVSysMan.xml";
- carStatePath = "./carState.xml";
- locateInfoPath = "./locateInfo.xml";
- }
- ivlog->debug("gstrxmlpath 启动配置文件路径:%s", gstrxmlpath.c_str());
- ivlog->debug("resManager.xml path: %s", carStatePath.c_str());
- ivlog->debug("resManager.xml path: %s", locateInfoPath.c_str());
- MainWindow w;
- w.show();
- return a.exec();
- }
|