main() { //创建负责读取输入的线程 DWORD ThreadID = 1, ThreadID1 = 2; HANDLE hRead, hRead1; initialize();//初始化数据 hMutex = CreateMutex(NULL, FALSE, NULL);//创建互斥对象 //建立两个线程 hRead = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)getInput, NULL, 0, &ThreadID);//接受键盘输入 hRead1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)IO, NULL, 0, &ThreadID1);//接受屏幕输入和dos输出 while (1)//不断重复判断电梯运行情况 { state_trans(); //根据自动机模型和control()计算出的电梯目标楼层和运行方向决定此刻电梯的状态 control(); //根据当前策略决定此刻电梯目标楼层和运行方向 if (startexit == 1)//检测到图形界面关闭 return退出 { return 0; } } }
void HMMDataSet::read(int idAction){ openMysqlSession(); cout<<"Reading HMMData for action:"<<idAction<<endl; this->idAction=idAction; ResultSet *resSet; PreparedStatement *prep_stmt; /* create a statement object */ prep_stmt = con -> prepareStatement("SELECT * FROM `HMMDataSet` WHERE `compression_rate`=? AND `num_clusters`=? AND `id_action`=?"); prep_stmt->setInt(1, compressionRate); prep_stmt->setInt(2, numClusters); prep_stmt->setInt(3, idAction); resSet = prep_stmt->executeQuery(); while (resSet->next()) { std::stringstream state_trans(resSet->getString("state_trans")); std::stringstream initial_state_dist(resSet->getString("initial_state_dist")); std::stringstream obs_prob_dist(resSet->getString("obs_prob_dist")); std::stringstream cluster_distribution(resSet->getString("cluster_distribution")); stateTrans.resize(numStates, vector<double>(numStates, 0)); initialStateDist.resize(numStates, 0); obsProbDist.resize(numStates, vector<double>(numStates,0)); clustDist.resize(numStates); for (int i = 0; i < numClusters; i++) { for (int j = 0; j < numClusters; j++) { state_trans >> stateTrans[i][j]; } } for (int j = 0; j < numClusters; j++) { initial_state_dist >> initialStateDist[j]; } for (int i = 0; i < numClusters; i++) { for (int j = 0; j < numClusters; j++) { obs_prob_dist>> obsProbDist[i][j]; } } for (int j = 0; j < numClusters; j++) { ClusterDistribution cluster; cluster_distribution >> cluster.mean.idCluster; cluster.mean.center.resize(Vector_Size); for (int k = 0; k < Vector_Size; k++) { cluster_distribution >> cluster.mean.center[k]; } cluster_distribution >> cluster.standardDeviation; clustDist.push_back(cluster); } } delete resSet; delete prep_stmt; closeMysqlSession(); }