PL/0语言词法及语法分析系统的设计与实现
2007-03-15 21:55:30 来源:WEB开发网核心提示: DWORD dwThreadID;::CreateThread(0,0,PL/0语言词法及语法分析系统的设计与实现(3),CompileThread,this,&bytesRead,NULL))break;strOut+=buffer;m_pwndOutBar->SetColorRi
DWORD dwThreadID;
::CreateThread(0,0,CompileThread,this,0,&dwThreadID);//创建进程
进程创建后调用进程函数,
//进程函数
DWORD WINAPI CompileThread(LPVOID pParam)
{
CCompileSysView *pView=(CCompileSysView*)pParam;
pView->GetCompileResult();
return 0;
}
进程函数调用类的自身函数GetCompileResult();得到分析核心的输出结果,这个函数的实现如下:void CCompileSysView::GetCompileResult()
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
CString strFile;
CString strOut;
strFile.Format("..\pl\pl.exe ");//指定分析核心程序的路径
//当前文件作为参数传给分析核心程序,防止这个文件名中含有空格,故用双引号""将文件名括住
strFile=strFile+(char)34+m_szCurFile+(char)34;
sa。nLength=sizeof(SECURITY_ATTRIBUTES);
sa。lpSecurityDescriptor=NULL;
sa。bInheritHandle=TRUE;
if(!CreatePipe(&hRead,&hWrite,&sa,0))//创建管道进行通信
{
MessageBox("Error On CreatePipe()");
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si。cb=sizeof(STARTUPINFO);
GetStartupInfo(&si);
si。hStdError=hWrite;
si。hStdOutput=hWrite;//输出重定向到文件
si。wShowWindow=SW_HIDE;
si。dwFlags=STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
//创建进程启动分析核心程序
if(!CreateProcess(NULL,(LPSTR)(LPCTSTR)strFile,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
MessageBox("Error on CreateProcess()");
return;
}
CloseHandle(hWrite);
char buffer[4096]={0};
DWORD bytesRead;
while(true)
{
if(!ReadFile(hRead,buffer,4095,&bytesRead,NULL))
break;
strOut+=buffer;
m_pwndOutBar->SetColorRichEditText(strOut);//将输出结果显示出来
Sleep(500);
}
}
这样就完成了整个分析系统的设计与实现。下面我们来看看整个系统是怎样运行的。我们先来看看这个系统的运行界面:
- ››PLSQL中配置远程数据库连接
- ››PL/SQL Cursor双嵌套的应用
- ››pl/sql获取工作时间
- ››Pl/SQL 从零开始
- ››Places Directory for Android试用
- ››PlayPad 手机音频播放器
- ››Planetbeing解锁iPhone 4最新工作进度更新
- ››Plastic Jelly Styles
- ››Platform engine using Box2D
- ››Platform engine using Box2D – Step 2
- ››Platform engine using Box2D – Step 3
- ››PL/SQL块定义部分之一标量类型
更多精彩
赞助商链接