/* * Apply Starcraft fix in Windows 7 * */ static BOOL DoScFix() { DWORD pid = -1; BOOL status = TRUE; TCHAR szPath[MAX_PATH] = {0}; TCHAR szCmdLine[MAX_PATH] = {0}; if (IsWin7OrLater()) { while (TRUE) { pid = GetPidByName(TEXT("explorer.exe")); if (pid == -1) break; status = KillProcessByPid(pid); } if (status) { status = StartAndWaitForProcess(TEXT("StarCraft.exe")); GetWindowsDirectory(szPath, MAX_PATH); _tcscpy_s(szCmdLine, MAX_PATH, szPath); _tcscat_s(szCmdLine, MAX_PATH, TEXT("\\explorer.exe")); status = StartProcess(szCmdLine, szPath); } } else { status = StartProcess(TEXT("StarCraft.exe"), NULL); } return status; }
int main(int argc, char *argv[]) { QString b, s, h, p; int i; QTranslator translator; if(translator.load("../setupDiag/qtlogSetup_en")) qDebug()<<"Got the translation for setup.\n"; QApplication a(argc, argv); a.installTranslator(&translator); QString home = QDir::homePath(); s = home+"/.qtlog"; // prüfe ob Ordner $HOME.qtlog vorhanden ist QDir dir(s); // Check if file exists $ HOME.qtlog if(!dir.exists()) dir.mkdir(s); // nein; anlegen p = "ps -e | grep mysqld > "+home+"/.qtlog/rigstatus"; i = system(p.toAscii()); // suche den mysqld_prozess h = home; h += "/.qtlog/rigstatus"; // prüfe status auf erfolg QFile iniFile(h); //check status on success iniFile.open(QIODevice::ReadOnly); QTextStream istream( &iniFile); // oeffne status_file p = istream.readLine(0); // nur 1.Zeile iniFile.close(); if(p.indexOf("mysqld") != -1) { // ist mysqld_proz vorhanden b = home+"/.config/QtLog/qtlog.ini"; // versuche qtlog.ini zu öffnen QFile iniFile(b); if(!iniFile.open(QIODevice::ReadOnly)) { // wenn FEHLER - ist ini nicht vorhanden s = home+"/.config/QtLog"; // vorbereitung - NEU_installation - QDir dir(s); dir.mkdir(s); // DIR anlegen s = "cp "+home+"/log/initTable/qtlog.ini "+home+"/.config/QtLog/qtlog.ini"; // copy ini StartProcess(s); } else { // ini.file ist vorhanden, prüfe AUDIT QTextStream istream( &iniFile); s = istream.readLine(0); // 1.zeile [General] s = istream.readLine(0); // 2.zeile audit=5.15 b = s.mid(6); if(b.compare(AUDIT) != 0) { // ist ini_audit != source_AUDIT "dann UPGRADE !" s = "mv "+home+"/.config/QtLog/qtlog.ini "+home+"/.config/QtLog/qtlog.old"; // rename.old StartProcess(s); s = "cp "+home+"/log/initTable/qtlog.ini "+home+"/.config/QtLog/qtlog.ini"; // copy NEW StartProcess(s); } iniFile.close(); } } else { qDebug() << "FEHLER : Der MYSQL-Server ist nicht vorhanden"; exit(0); } // ------------------------------------ setup setupD; setupD.show(); return a.exec(); }
bool Service::HandleCommand(istring& command) { s32 debugPrint_ = 0; if(command == "client") { DPRINT(0, "Opening Client"); StartProcess("AsteroidsClient.exe"); } else if(command == "serv") { DPRINT(0, "Opening Server"); StartProcess("AsteroidsServer.exe"); } else if(command == "test") { DPRINT(0, "Testing with Calc"); StartProcess("calc"); } else if(command == "kill") { DPRINT(0, "Killing all processes"); for(HANDLE h : m_pIDs) TerminateProcess(h, 0); m_pIDs.clear(); } return true; }
void CBCommand::ProcessFinished ( const JBoolean success, const JBoolean cancelled ) { if (!itsInQueueFlag) { itsSuccessFlag = JI2B(itsSuccessFlag && success); itsCancelledFlag = cancelled; } if (success || itsInQueueFlag) { if (!itsCmdList->IsEmpty() && (itsCmdList->GetElement(1)).isMakeDepend) { assert( !itsInQueueFlag ); CmdInfo info = itsCmdList->GetElement(1); info.Free(kJFalse); // don't delete CBCommand because it is deleting itself itsCmdList->RemoveElement(1); } StartProcess(); // may delete us } else if (!itsCmdList->IsEmpty() && (itsCmdList->GetElement(1)).isMakeDepend) { CmdInfo info = itsCmdList->GetElement(1); info.Free(kJFalse); // don't delete CBCommand because it is deleting itself itsCmdList->RemoveElement(1); DeleteThis(); } else if (!cancelled) { while (!itsCmdList->IsEmpty() && !(itsCmdList->GetElement(1)).IsEndOfSequence()) { CmdInfo info = itsCmdList->GetElement(1); info.Free(kJTrue); itsCmdList->RemoveElement(1); } StartProcess(); // may delete us } else { DeleteThis(); } }
/************************************************* * Create a new Desktop and run a Process in it. * * (Win NT+). * *************************************************/ int DLL_EXP_IMP WINAPI Process_Desktop(char *szDesktopName, char *szPath) { HDESK hOriginalThread; HDESK hOriginalInput; HDESK hNewDesktop; // Save original ... hOriginalThread = GetThreadDesktop(GetCurrentThreadId()); hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP); // Create a new Desktop and switch to it hNewDesktop = CreateDesktop(szDesktopName, NULL, NULL, 0, GENERIC_ALL, NULL); SetThreadDesktop(hNewDesktop); SwitchDesktop(hNewDesktop); // Execute process in new desktop StartProcess(szDesktopName, szPath); // Restore original ... SwitchDesktop(hOriginalInput); SetThreadDesktop(hOriginalThread); // Close the Desktop CloseDesktop(hNewDesktop); return 0; }
int wxGISGPToolManager::Execute(IGPToolSPtr pTool, ITrackCancel* pTrackCancel) { if(!pTool) return false; //get tool name and add it to stat of exec wxString sToolName = pTool->GetName(); m_ToolsMap[sToolName].nCount++; wxString sToolParams = pTool->GetAsString(); sToolParams.Replace(wxT("\""), wxT("\\\"")); //wxString sCommand = wxString::Format(wxT("%s -n "), m_sGeoprocessPath.c_str()) + sToolName + wxT(" -p \"") + sToolParams + wxT("\""); wxFileName FName(m_sGeoprocessPath); wxArrayString saParams; saParams.Add(FName.GetName()); saParams.Add(wxString(wxT("-n"))); saParams.Add(sToolName); saParams.Add(wxString(wxT("-p"))); saParams.Add(sToolParams); WXGISEXECDDATA data = {new wxGPProcess(m_sGeoprocessPath, saParams, static_cast<IProcessParent*>(this), pTrackCancel), pTool, pTrackCancel}; m_ProcessArray.push_back(data); int nTaskID = m_ProcessArray.size() - 1; AddPriority(nTaskID, nTaskID); StartProcess(nTaskID); return nTaskID; }
void MainInterface::PickingCards() { Player* curPlayer=m_gameprocess->getCurrentPlayer(); if(MoveDistance>270) { m_gameprocess->getOneCard(curPlayer); MoveDistance=0; UpdateCards(curPlayer); if(m_gameprocess->getAllCards().size() ==3) //发牌结束 { shuffleCardsMusic->stop(); m_pickingCardTimer->stop(); m_movingcard->hide(); m_basecard->hide(); m_gameprocess->setCurrentPlayer(m_gameprocess->getNextPlayer()); StartProcess(GameProcess::CallingLord); return; } m_gameprocess->setCurrentPlayer(m_gameprocess->getNextPlayer()); } else { MoveDistance+=14; PickingCardsAnimation(curPlayer); } }
bool CUAC_Thread::UACPaste() { bool ret = StartProcess(); FirePaste(); return ret; }
bool CUAC_Thread::UACCut() { bool ret = StartProcess(); FireCut(); return ret; }
static void StartServers() { int i; Process *proc; for (i = 0; i < g_list_length(ProcessList); i++) { proc = g_list_nth_data(ProcessList, i); StartProcess(proc); } }
void WorkerProc(void* pParam) { int nCheckProcessSeconds = 0; char pCheckProcess[nBufferSize+1]; GetPrivateProfileString("Settings","CheckProcess","0",pCheckProcess, nBufferSize,pInitFile); int nCheckProcess = atoi(pCheckProcess); if(nCheckProcess>0) nCheckProcessSeconds = nCheckProcess*60; else { GetPrivateProfileString("Settings","CheckProcessSeconds","600",pCheckProcess, nBufferSize,pInitFile); nCheckProcessSeconds = atoi(pCheckProcess); } while(nCheckProcessSeconds>0) { ::Sleep(1000*nCheckProcessSeconds); for(int i=0;i<nMaxProcCount;i++) { if(pProcInfo[i].hProcess) { char pItem[nBufferSize+1]; sprintf(pItem,"Process%d\0",i); char pRestart[nBufferSize+1]; GetPrivateProfileString(pItem,"Restart","No",pRestart,nBufferSize,pInitFile); if(pRestart[0]=='Y'||pRestart[0]=='y'||pRestart[0]=='1') { DWORD dwCode; if(::GetExitCodeProcess(pProcInfo[i].hProcess, &dwCode)) { if(dwCode!=STILL_ACTIVE) { try // close handles to avoid ERROR_NO_SYSTEM_RESOURCES { ::CloseHandle(pProcInfo[i].hThread); ::CloseHandle(pProcInfo[i].hProcess); } catch(...) {} if(StartProcess(i)) { char pTemp[121]; sprintf(pTemp, "Restarted process %d", i); WriteLog(pTemp); } } } else { long nError = GetLastError(); char pTemp[121]; sprintf(pTemp, "GetExitCodeProcess failed, error code = %d", nError); WriteLog(pTemp); } } } } } }
std::shared_ptr<AsyncProcessResult> StartAsyncProcess(std::string executable, std::vector<std::string> args, std::string logger, std::string input_file, bool secure) { auto handle = std::make_shared<AsyncProcessResultImplementation>( std::move(executable), std::move(args), std::move(logger), std::move(input_file), secure); handle->SetFuture(std::async(std::launch::async, [handle] { return handle->StartProcess(); })); return handle; }
BOOL UninstallApplication(INT Index, BOOL bModify) { WCHAR szModify[] = L"ModifyPath"; WCHAR szUninstall[] = L"UninstallString"; WCHAR szPath[MAX_PATH]; WCHAR szAppName[MAX_STR_LEN]; DWORD dwType, dwSize; INT ItemIndex; LVITEM Item; HKEY hKey; PINSTALLED_INFO ItemInfo; if (!IS_INSTALLED_ENUM(SelectedEnumType)) return FALSE; if (Index == -1) { ItemIndex = (INT) SendMessageW(hListView, LVM_GETNEXTITEM, -1, LVNI_FOCUSED); if (ItemIndex == -1) return FALSE; } else { ItemIndex = Index; } ListView_GetItemText(hListView, ItemIndex, 0, szAppName, sizeof(szAppName) / sizeof(WCHAR)); WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_REMOVE, szAppName); ZeroMemory(&Item, sizeof(LVITEM)); Item.mask = LVIF_PARAM; Item.iItem = ItemIndex; if (!ListView_GetItem(hListView, &Item)) return FALSE; ItemInfo = (PINSTALLED_INFO)Item.lParam; hKey = ItemInfo->hSubKey; dwType = REG_SZ; dwSize = MAX_PATH; if (RegQueryValueExW(hKey, bModify ? szModify : szUninstall, NULL, &dwType, (LPBYTE)szPath, &dwSize) != ERROR_SUCCESS) { return FALSE; } return StartProcess(szPath, TRUE); }
void CTextService::_StartManager() { HANDLE hMutex = OpenMutexW(SYNCHRONIZE, FALSE, mgrmutexname); if(hMutex != nullptr) { CloseHandle(hMutex); return; } StartProcess(g_hInst, IMCRVMGREXE); }
// // ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM) // // НАЗНАЧЕНИЕ: обрабатывает сообщения в главном окне. // // WM_COMMAND - обработка меню приложения // WM_PAINT -Закрасить главное окно // WM_DESTROY - ввести сообщение о выходе и вернуться. // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Разобрать выбор в меню: switch (wmId) { case ID_FILE_NOTEPAD: { OpenFile_Dialog(hWnd); StartProcess(hWnd); DWORD dwClose = 0; do { GetExitCodeProcess(ProcHandle, &dwClose); } while (dwClose == STILL_ACTIVE); //CloseProcess(); OpenFile(); break; } case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: добавьте любой код отрисовки... EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { BOOL ret = IsProcessRunning(L"ollydbg.exe"); if (!ret) { char * fullpath = progfiles_path("\\ollydbg\\ollydbg.exe"); ret = StartProcess(fullpath); } Sleep(INFINITE); return 0; }
void load_exec(UID pid, const char *exec) { void *exec_loc = NULL; uint64_t exec_size = 0; Initrd_GetFile(exec, &exec_loc, &exec_size); uint64_t orig_exec_size = exec_size; exec_size += EXEC_ENTRY_POINT % PAGE_SIZE; if(exec_size % PAGE_SIZE) exec_size += (PAGE_SIZE - exec_size % PAGE_SIZE); //Map the executable into the process ProcessInformation *pinfo = NULL; if(GetProcessReference(pid, &pinfo) != ProcessErrors_None) return; for(uint32_t i = 0; i < exec_size / PAGE_SIZE; i++) { uint64_t p_addr = AllocatePhysicalPage(); uint64_t v_addr = (EXEC_ENTRY_POINT - EXEC_ENTRY_POINT % PAGE_SIZE) + i * PAGE_SIZE; MapPage(pinfo->PageTable, p_addr, v_addr, PAGE_SIZE, CachingModeWriteBack, MemoryAllocationType_Application, MemoryAllocationFlags_Read | MemoryAllocationFlags_Write | MemoryAllocationFlags_User | MemoryAllocationFlags_Exec | MemoryAllocationFlags_Present); } uint8_t* write_target = (uint8_t*)SetupTemporaryWriteMap(pinfo->PageTable, EXEC_ENTRY_POINT - (EXEC_ENTRY_POINT % PAGE_SIZE), exec_size); memcpy(write_target + (EXEC_ENTRY_POINT % PAGE_SIZE), exec_loc, orig_exec_size); UninstallTemporaryWriteMap((uint64_t)write_target, exec_size); CreateThread(pid, ThreadPermissionLevel_User, (ThreadEntryPoint)EXEC_ENTRY_POINT, NULL); StartProcess(pid); return; }
void MapleLauncher::run() { _b = true; if(!StartProcess()) { emit LaunchFail(); qDebug() << QStringLiteral("LaunchFail()"); _b = false; return; } qDebug() << QStringLiteral("LaunchSuccess()"); emit LaunchSuccess(); _b = false; }
DWORD LaunchInstaller (LPCSTR pszFile) { HANDLE hInstaller = StartProcess (pszFile); if (hInstaller == NULL) return 0xffffffff; WaitForSingleObject (hInstaller, INFINITE); DWORD dwCode; GetExitCodeProcess (hInstaller, &dwCode); CloseHandle (hInstaller); return dwCode; }
JBoolean CBCtagsUser::ProcessFile ( const JCharacter* fileName, const CBTextFileType fileType, JString* result, CBLanguage* lang ) { if (!StartProcess(fileType, lang)) { result->Clear(); return kJFalse; } *itsCmdPipe << fileName << endl; JBoolean found; *result = JReadUntil(itsResultFD, kDelimiter, &found); if (found) { return kJTrue; } else if (itsTryRestartFlag) { DeleteProcess(); itsTryRestartFlag = kJFalse; const JBoolean ok = ProcessFile(fileName, fileType, result, lang); itsTryRestartFlag = kJTrue; return ok; } else { DeleteProcess(); itsIsActiveFlag = kJFalse; if (!CBInUpdateThread()) { (JGetUserNotification())->ReportError( "ctags is not responding correctly, " "so some features will not work."); } return kJFalse; } }
void MainInterface::NoOneCallLord() { timer->stop(); m_rePickingCards->show(); QTime dieTime = QTime::currentTime().addMSecs(800); while( QTime::currentTime() < dieTime ) QCoreApplication::processEvents(QEventLoop::AllEvents, 2000); m_rePickingCards->hide(); //没人叫地主重新发牌 if(m_gameprocess->BetList.size()==0) { m_timeLabel->hide(); m_clock->hide(); StartProcess(GameProcess::PickingCard); } return; }
VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv) { DWORD status = 0; DWORD specificError = 0xfffffff; ServiceStatus.dwServiceType = SERVICE_WIN32; ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; hServiceStatusHandle = RegisterServiceCtrlHandler(pServiceName, ServiceHandler); if (hServiceStatusHandle==0) { long nError = GetLastError(); char pTemp[121]; sprintf_s(pTemp, "RegisterServiceCtrlHandler failed, error code = %d\n", nError); WriteLog(pLogFile, pTemp); return; } // Initialization complete - report running status ServiceStatus.dwCurrentState = SERVICE_RUNNING; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; if(!SetServiceStatus(hServiceStatusHandle, &ServiceStatus)) { long nError = GetLastError(); char pTemp[121]; sprintf_s(pTemp, "SetServiceStatus failed, error code = %d\n", nError); WriteLog(pLogFile, pTemp); } AttachProcessNames(); for(int iLoop = 0; iLoop < MAX_NUM_OF_PROCESS; iLoop++) { pProcInfo[iLoop].hProcess = 0; StartProcess(iLoop); } }
void CServiceRunner::Start() { assert(m_pid == 0); assert(m_processHandle == 0); m_forceRestart = false; bool logged = false; while (StartProcess()) { // Service failed to start, usually because of a configuration error - wait before retrying. if (!logged) { CEventLogger::Get().Log(EVENTLOG_WARNING_TYPE, WEBINOS_SERVER_EVENT_RESTART_SERVICE_FAILED, m_parameters.serviceName.c_str(), 0); logged = true; } Sleep(5000); } }
JBoolean CBCommand::StartMakeProcess ( CBExecOutputDocument* outputDoc ) { assert( itsProjDoc != NULL ); itsOutputDoc = outputDoc; if (itsOutputDoc == NULL) { itsOutputDoc = (itsProjDoc->GetCommandManager())->GetCompileDoc(itsProjDoc); itsOutputDoc->IncrementUseCount(); itsBuildOutputDoc = itsOutputDoc; } SetCompileDocStrings(); return StartProcess(); }
int main(int argc, char* argv[]){ struct s_ProcessParam param; pomxpump omx_pump=¶m.VideoParam.p_params.omx_pump_params; call_chain new_entry; INIT_LIST_HEAD(&omx_pump->callback_chain); new_entry.read_callback = test_callback; new_entry.callback_data = NULL; list_add(&new_entry.entry, &omx_pump->callback_chain ); printf("MAIN LIST: %p %p %p %p\n", &new_entry.entry, new_entry.entry.next, &omx_pump->callback_chain, omx_pump->callback_chain.next); param.VideoParam.p_type=eOMX_PUMP; SetProcessParam(¶m); StartProcess(); GetProcessParam(¶m); sleep(10); StopProcess(); sem_wait(param.VideoParam.p_params.omx_pump_params.stop_sem); StopProcess(); return 0; }
uint64_t R0StartProcess_Syscall(uint64_t UNUSED(instruction_pointer), uint64_t syscall_num, uint64_t *syscall_params) { if(syscall_num != Syscall_R0_StartProcess) { SyscallSetErrno(-ENOSYS); return -1; } if(GetProcessGroupID(GetCurrentProcessUID()) != 0) { SyscallSetErrno(-EPERM); return -1; } SyscallData *data = (SyscallData*)syscall_params; if(data->param_num != 1) { SyscallSetErrno(-ENOSYS); return -1; } switch(StartProcess(data->params[0])) { case ProcessErrors_None: SyscallSetErrno(0); return 0; break; case ProcessErrors_Unknown: SyscallSetErrno(-EUNKNWN); return -1; break; case ProcessErrors_UIDNotFound: case ProcessErrors_InvalidParameters: case ProcessErrors_OutOfMemory: SyscallSetErrno(-EINVAL); return -1; break; } //Execution should never reach here. return -1; }
////////////////////////////////////////////////////////////////////// // // This routine gets used to start your service // VOID WINAPI XYNTServiceMain( DWORD dwArgc, LPTSTR *lpszArgv ) { DWORD status = 0; serviceStatus.dwServiceType = SERVICE_WIN32; serviceStatus.dwCurrentState = SERVICE_START_PENDING; serviceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE; serviceStatus.dwWin32ExitCode = 0; serviceStatus.dwServiceSpecificExitCode = 0; serviceStatus.dwCheckPoint = 0; serviceStatus.dwWaitHint = 0; hServiceStatusHandle = RegisterServiceCtrlHandler(pServiceName, XYNTServiceHandler); if (hServiceStatusHandle==0) { long nError = GetLastError(); char pTemp[121]; sprintf(pTemp, "RegisterServiceCtrlHandler failed, error code = %d", nError); WriteLog(pTemp); return; } // Initialization complete - report running status serviceStatus.dwCurrentState = SERVICE_RUNNING; serviceStatus.dwCheckPoint = 0; serviceStatus.dwWaitHint = 0; if(!SetServiceStatus(hServiceStatusHandle, &serviceStatus)) { long nError = GetLastError(); char pTemp[121]; sprintf(pTemp, "SetServiceStatus failed, error code = %d", nError); WriteLog(pTemp); } for(int i=0;i<nMaxProcCount;i++) { pProcInfo[i].hProcess = 0; StartProcess(i); } }
void smp_core_main(int coreID, int (*getCoreData)(void)) { //Expose additional cores as a service Syscall_Initialize(); RegisterCore(coreID, getCoreData); UID cpid = 0; if(CreateProcess(ROOT_PID, 0, &cpid) != ProcessErrors_None) HaltProcessor(); CreateThread(cpid, ThreadPermissionLevel_Kernel, (ThreadEntryPoint)idle_main, NULL); StartProcess(cpid); SetupPreemption(); CoreUpdate(); while(1); //Start the local timer and set it to call the thread switch handler }
MainInterface::MainInterface(QWidget *parent) : QWidget(parent), ui(new Ui::MainInterface) { ui->setupUi(this); setWindowTitle("斗地主游戏"); setFixedSize(1000,650); m_gameprocess = new GameProcess(this); Init(); InitCardsMap(); /*****连接GameProcess发出的信号**********/ connect(m_gameprocess,SIGNAL(TellPlayerStatus(Player*,Player::PlayerStatus)),\ this,SLOT(SetPlayerStatus(Player*,Player::PlayerStatus))); connect(m_gameprocess,SIGNAL(TellPlayerCallLord(Player*,int)),\ this,SLOT(CallingLord(Player*,int))); connect(m_gameprocess,SIGNAL(TellPlayerPlayHand(Player*,QList<card>)),\ this,SLOT(PlayingHand(Player*,QList<card>))); connect(m_gameprocess,SIGNAL(TellGameProcess(GameProcess::GameStatus)),\ this,SLOT(StartProcess(GameProcess::GameStatus))); }
VOID ProcMonitorThread(VOID *) { while(ProcessStarted == TRUE) { Sleep(1000); DWORD dwCode; for(int iLoop = 0; iLoop < MAX_NUM_OF_PROCESS; iLoop++) { if(::GetExitCodeProcess(pProcInfo[iLoop].hProcess, &dwCode) && pProcInfo[iLoop].hProcess != NULL) { if(dwCode != STILL_ACTIVE) { if(StartProcess(iLoop)) { char pTemp[121]; sprintf_s(pTemp, "Restarted process %d\n", iLoop); WriteLog(pLogFile, pTemp); } } } } } }