微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创build过程不起作用

我正在创build一个进程,并向系统请求很多内核对象。 我的代码是:

int main(){ //Cria processo para o Data Viewer Unit LPSTARTUPINFOA si; PROCESS_@R_433_4045@ION pi; // Start the child process. if(!CreateProcessA( "E:\Documents\Faculdade\Matérias\Automação em Tempo Real\TP 3\DataViewerUnit\Debug\DataViewerUnit.exe",// Module name NULL,// Command line NULL,// Process handle not inheritable NULL,// Thread handle not inheritable FALSE,// Set handle inheritance to FALSE CREATE_NEW_CONSOLE,// No creation flags NULL,// Use parent's environment block NULL,// Use parent's starting directory si,// Pointer to STARTUPINFO structure &pi ) // Pointer to PROCESS_@R_433_4045@ION structure ) { printf( "CreateProcess Failed (%d).n",GetLastError() ); return 0; } // Wait until child process exits. WaitForSingleObject( pi.hProcess,INFINITE ); LOG("Traffic System initiating..."); LOG("Keyboard commands:n" "0 - Changes the system mode to manual.n" "1 - Changes the system mode to automatic.n" "Spacebar - Swaps between buffer lock and unlock.n" "ESC - Terminates the program." ); system("PAUSE"); isAutoMode = TRUE; terminate_progam = FALSE; terminate_TOU = FALSE; bufferSpace = BUFFER_SIZE; InitializeCriticalSection(&bufferCS); system("PAUSE"); hmailslot = CreateFile(mailslot,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_norMAL,NULL); ASSERT(hmailslot,"mailslot Couldn't be created"); hHasPosition = CreateSemaphore(NULL,BUFFER_SIZE,(LPCWSTR)"HAS_POSITION"); ASSERT(hHasPosition,"Positions to write semaphore Couldn't be created."); hHasMsg = CreateSemaphore(NULL,(LPCWSTR)"HAS_MSG"); ASSERT(hHasMsg,"Messages to read semaphore Couldn't be created."); hBufferLockStatus = CreateEvent(NULL,true,(LPCWSTR)"BUFFER_LOCK_STATUS"); ASSERT(hBufferLockStatus,"Lock status semaphore Couldn't be created."); hTimer = CreateSemaphore(NULL,1,(LPCWSTR)"REMOTE_UNITS_TIMER"); ASSERT(hTimer,"Timer semaphore Couldn't be created."); nextMsgToRead = 0; nextPositionToWrite = 0; for (int i = 0;i < RU_QUANTITY;i++) { hRUs[i] = (HANDLE) _beginthreadex(NULL,(CAST_FUNCTION)RUAction,(LPVOID)i,NULL); ASSERT(hRUs[i],"RU " << i << "Could not be created."); DEBUG("RU " << i << " created."); RUTime[i] = generateTime(100,200); DEBUG("Remote Unit " << i << " interval: " << RUTime[i]); } HANDLE hTOU = (HANDLE) _beginthreadex(NULL,(CAST_FUNCTION)TOUAction,NULL); ASSERT(hTOU,"Traffic Optimization Unit Couldn't be created."); bool isLocked = false; int typed; do{ typed = _getch(); switch(typed){ case CHAR0: if(isAutoMode) LOG("You changed the mode to manual.") else LOG("Mode is already manual.") isAutoMode = false; break; case CHAR1: if(!isAutoMode) LOG("You changed the mode to automatic.") else LOG("Mode is already automatic.") isAutoMode = true; break; case SPACEBAR : if(isLocked){ isLocked = false; SetEvent(hBufferLockStatus); LOG("You unlocked the buffer."); } else { isLocked = true; ResetEvent(hBufferLockStatus); LOG("You locked the buffer."); } break; Default: break; } } while (typed!=ESC); LOG("You typed ESC,the program will be finished."); //Pede o fim das threads terminate_progam = true; // Importante para que as threads não fiquem // travadas sem poder terminar. SetEvent(hBufferLockStatus); WaitForMultipleObjects(RU_QUANTITY,hRUs,TRUE,INFINITE); terminate_TOU = true; WaitForSingleObject(hTOU,INFINITE); // Close process and thread handles. CloseHandle(pi.hProcess); CloseHandle(pi.hThread); CloseHandle(hHasMsg); CloseHandle(hHasPosition); CloseHandle(hBufferLockStatus); CloseHandle(hTimer); return 0; }

我已经评论了所有这些代码,并且创build过程运行正常。 当我离开多个内核对象时,程序停止运行,Windows Vista显示“This program stop to run …”的消息。 另一个过程只是一个说法…

我想知道我的代码有什么问题。 问候,莱安德罗利马

快速,二进制数据库替代

用C#和参数运行cmd

如何在Windows上设置pthreads?

哪里可以find所有文化特定的CultureInfostring比较规则?

如何在Linux中完成cpu分配? 线程级别或进程级别?

如何使C ++程序侦听系统命令

使用RSA分配/validation签名(PKCS 7)

Socket.Bind然后连接MS Loopback网卡

找出谁locking在C#中的networking驱动器上的文件

Windows Mobile精简版框架devise器inheritance

使用zeromemory或memset并初始化您的ProcessInfo和StartupInfo

这是声明一个启动信息结构的指针声明结构,并通过引用传递它LPSTARTUPINFOA si

设置si.cb = sizeof(STARTUPINFO)

像这样的东西

PROCESS_@R_433_4045@ION PI; STARTUPINFO SI; SI.dwFlags = STARTF_USESTDHANDLES; SI.cb = sizeof(STARTUPINFO); char * sCommandLine = _strdup(sCommand.c_str()); if(!CreateProcess(NULL,sCommandLine,CREATE_NO_WINDOW,&SI,&PI))

您将一个未初始化的指针传递给一个STARTUPINFO结构。 你需要声明一个STARTUPINFO结构,初始化它的字段,并传递一个指针给它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐