⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 global.cpp

📁 一个多线程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
}

CString gcsString,gcsId,gcsName;

DWORD dwStructArray[200];

BOOL WINAPI RunCommand(DWORD dwCommand,HANDLE hParam,HANDLE & hResult)
{
	switch(dwCommand){
	case 0:
		{//compile file
			CAWFlow m_Compi;
			m_Compi.SetBus(gDllGlobalManager.GetBus());
			time_t tm=time(NULL);
			BOOL bRet=m_Compi.CreateFlow((LPSTR)hParam,(DWORD)tm);
			if(bRet){
				m_Compi.CloseFlow(TRUE);
			}
			return bRet;
		}
		break;
	case 1:
		{//prepare trace a own compile flow
			CAWFlow * pFlow=new CAWFlow;
			pFlow->SetBus(gDllGlobalManager.GetBus());
			time_t tm=(time_t)hResult;
			if(!hResult)tm=time(NULL);
			BOOL bRet=pFlow->CreateFlow((LPSTR)hParam,(DWORD)tm);
			if(bRet){
				gDllGlobalManager.m_FlowList.Add(pFlow);
			}
			else{
				delete pFlow;
				pFlow=NULL;
			}
			pFlow->SetDebugStyle(TRUE);
			pFlow->m_bBoolCanTrace=TRUE;
			pFlow->m_bAutoDelete=TRUE;
			return (BOOL)((CUserControl *)pFlow);
		}
		break;
	case 2:
		{//clear trace a own compile flow
			CUserControl * p=(CUserControl * )hParam;
			CAWFlow * pFlow=(CAWFlow * )p;
			for(int i=0;i<gDllGlobalManager.m_FlowList.GetSize();i++){
				if(gDllGlobalManager.m_FlowList[i]==pFlow){
					if(p->IsValid()&&p->ControlValid()){
						p->EndTask();
					}
//					delete pFlow;//AUTO RELEASE
					gDllGlobalManager.m_FlowList.RemoveAt(i);
					return TRUE;
				}
			}
			return FALSE;
		}
		break;
	case 3:
		{
			DWORD dwOldId=(DWORD)hParam;
			DWORD dwNewId=(DWORD)hResult;
			CUserFlow * p=gFlowMg.FindFlow(dwOldId,TRUE);
			if(p){
				if(dwNewId){
					p->m_dwFlowId=dwNewId;
				}
				else{
					gFlowMg.CloseFlow(p);
				}
				return TRUE;
			}
		}
		break;
	case 4:
		{
			CUserControl * p=(CUserControl * )hParam;
			DWORD dwCommId=(DWORD)hResult;
			if(p&&p->IsValid()&&p->ControlValid()){
				switch(dwCommId){
				case 0:
					return p->Start();
				case 1:
					p->CloseFlow();
					return TRUE;
				case 2:
					return p->Step();
				case 3:
					return p->Resume();
				case 4:
					return p->Suspend();
				case 5:
					p->SetDebugStyle(TRUE);
					return TRUE;
				case 6:
					p->SetDebugStyle(FALSE);
					return TRUE;
				}
			}
			return FALSE;
		}
		break;
	case 5:
		{
			CUserControl * p=(CUserControl * )hParam;
			DWORD dwCommId=(DWORD)hResult;
			if(p&&p->IsValid()&&p->ControlValid()/*&&p->IsPaused()*/){
				UniVar tv;
				if(p->GetDataValue(dwCommId,tv)){
					if(tv.it==DATA_TYPE_HANDLE){
						gcsString.Format("Len:%ld",tv.GetDataLength());
						if(tv.GetDataLength()){
							gcsString+=",";
							if(tv.ToA()){
								gcsString+=(LPSTR)tv;
							}
						}
					}
					else{
						char * ppp=tv.ToA();
						if(ppp){
							gcsString=ppp;
						}
						else{
							gcsString="";
						}
					}
				}
				else{
					gcsString="无效变量";
				}
			}
			else{
				gcsString="无效变量";
			}
			return (BOOL)(LPCTSTR)gcsString;
		}
		break;
	case 6:
		{
			CUserControl * p=(CUserControl * )hParam;
			if(p&&p->IsValid()&&p->ControlValid()/*&&p->IsPaused()*/){
				int itype=0;
				POSITION pos=p->m_pFlow->m_pStyle->m_StyleStrTable.GetStartPosition();
				DWORD dwId;
				int i=0;
				while(pos){
					p->m_pFlow->m_pStyle->m_StyleStrTable.GetNextAssoc(pos,gcsName,(void * &)dwId);
					switch(dwId&STYPE_FILTER){
					case TYPE_STATIC:
					case TYPE_VARIANT:
						{
							if(dwId&STYPE_FILTER==TYPE_STATIC){
								itype=0;
							}
							else{
								itype=1;
							}
							gcsId.Format("0x%lx",dwId);
							UniVar tv;
							if(p->GetDataValue(dwId,tv)){
								if(tv.it==DATA_TYPE_HANDLE){
									gcsString.Format("Len:%ld",tv.GetDataLength());
									if(tv.GetDataLength()){
										gcsString+=",";
										if(tv.ToA()){
											gcsString+=(LPSTR)tv;
										}
									}
								}
								else{
									char * ppp=tv.ToA();
									if(ppp){
										gcsString=ppp;
									}
									else{
										gcsString="";
									}
								}
							}
							else{
								gcsString="无效变量";
							}
							if(gDllGlobalManager.m_pGlobalApi)
								gDllGlobalManager.m_pGlobalApi->APISetFlowVariant(gcsName,gcsString,gcsId,itype,i);
							i++;
						}
						break;
					}
				}
				pos=p->m_pFlow->m_FlowStrTable.GetStartPosition();
				while(pos){
					p->m_pFlow->m_FlowStrTable.GetNextAssoc(pos,gcsName,(void * &)dwId);
					switch(dwId&STYPE_FILTER){
					case TYPE_GLOBALVAR:
						{
							itype=2;
							gcsId.Format("0x%lx",dwId);
							UniVar tv;
							if(p->GetDataValue(dwId,tv)){
								if(tv.it==DATA_TYPE_HANDLE){
									gcsString.Format("Len:%ld",tv.GetDataLength());
									if(tv.GetDataLength()){
										gcsString+=",";
										if(tv.ToA()){
											gcsString+=(LPSTR)tv;
										}
									}
								}
								else{
									char * ppp=tv.ToA();
									if(ppp){
										gcsString=ppp;
									}
									else{
										gcsString="";
									}
								}
							}
							else{
								gcsString="无效变量";
							}
							if(gDllGlobalManager.m_pGlobalApi)
								gDllGlobalManager.m_pGlobalApi->APISetFlowVariant(gcsName,gcsString,gcsId,itype,i);
							i++;
						}
						break;
					}
				}
			}
		}
		break;
	case 7:
		{
			CUserControl * p=(CUserControl * )hParam;
			if(p&&p->IsValid()&&p->ControlValid()/*&&p->IsPaused()*/&&p->m_pControl->m_CallSt.pt.pFun){
				if(hResult==p->m_pControl->m_CallSt.pt.pOt)return TRUE;
				int itype=0;
				DWORD dwId;
				int i=0;
				CString cs="";
				POSITION pos=p->m_pFlow->m_FlowStrTable.GetStartPosition();
				switch(p->m_pControl->m_CallSt.iType){
				case CALL_MAIN:
					cs="_mainproc__";
						break;
				case CALL_EVENT:
				case CALL_FUNC:
					while(pos){
						p->m_pFlow->m_FlowStrTable.GetNextAssoc(pos,cs,(void * &)dwId);
						if(dwId==p->m_pControl->m_CallSt.pt.pEv->dwPositionId){
							cs+="__";
							pos=p->m_pFlow->m_FlowStrTable.GetStartPosition();
							break;
						}
					}
					break;
				default:
					pos=NULL;
				}
				hResult=p->m_pControl->m_CallSt.pt.pOt;
				if(!pos)return FALSE;
				CString cs1;
				while(pos){
					p->m_pFlow->m_FlowStrTable.GetNextAssoc(pos,cs1,(void * &)dwId);
					if((dwId&STYPE_FILTER)==TYPE_LOCALVAR){
						if(!memcmp((void *)(LPCTSTR)cs,(void *)(LPCTSTR)cs1,cs.GetLength())){
							gcsName=((LPCTSTR)cs1)+cs.GetLength();
							itype=3;
							gcsId.Format("0x%lx",dwId);
							UniVar tv;
							if(p->GetDataValue(dwId,tv)){
								if(tv.it==DATA_TYPE_HANDLE){
									gcsString.Format("Len:%ld",tv.GetDataLength());
									if(tv.GetDataLength()){
										gcsString+=",";
										if(tv.ToA()){
											gcsString+=(LPSTR)tv;
										}
									}
								}
								else{
									char * ppp=tv.ToA();
									if(ppp){
										gcsString=ppp;
									}
									else{
										gcsString="";
									}
								}
							}
							else{
								gcsString="无效变量";
							}
							if(gDllGlobalManager.m_pGlobalApi)
								gDllGlobalManager.m_pGlobalApi->APISetFlowVariant(gcsName,gcsString,gcsId,itype,i);
							i++;
						}
					}
				}
				return TRUE;
			}
			return FALSE;
		}
		break;
	case 8://get current local point
		{
			CUserControl * p=(CUserControl * )hParam;
			if(p&&p->IsValid()&&p->ControlValid()&&p->IsPaused()&&p->m_pControl->m_CallSt.pt.pFun){
				hResult=(HANDLE)p->m_pControl->m_CallSt.pt.pFun;
			}
			else{
				hResult=NULL;
			}
			return TRUE;
		}
		break;
	case 9://get user flow info
		{
			CUserControl * p=(CUserControl * )hParam;
			hResult=NULL;
			if(p&&p->IsValid()&&p->ControlValid()){
				if(p->m_pFlow){
					hResult=(HANDLE)dwStructArray;
					gcsName=p->m_pFlow->m_csFileName;
					dwStructArray[0]=(DWORD)(LPCTSTR)gcsName;
					dwStructArray[1]=p->m_pFlow->m_dwFlowId;
					dwStructArray[2]=(DWORD)(p->m_pFlow->m_ListName.GetSize()+1);
					gcsString=p->m_csDescripe;
					dwStructArray[3]=(DWORD)(LPCTSTR)gcsString;
				}
			}
			return TRUE;
		}
		break;
	case 10://get user flow info
		{
			CUserControl * p=(CUserControl * )hParam;
			hResult=NULL;
			if(p&&p->IsValid()&&p->ControlValid()){
				if(p->m_pFlow){
					hResult=(HANDLE)dwStructArray;
					dwStructArray[0]=(DWORD)(p->m_pFlow->m_ListName.GetSize()+1);
					dwStructArray[1]=(DWORD)(LPCTSTR)p->m_pFlow->m_csFileName;
					for(int i=0;i<p->m_pFlow->m_ListName.GetSize();i++){
						dwStructArray[2+i]=(DWORD)(LPCTSTR)(*p->m_pFlow->m_ListName[i]);
					}
					return TRUE;
				}
			}
		}
		break;
	default:
		break;
	}
	return FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -