void LibraryManager::show() { if(slotLoad == false) { loaded.reset(); requestedLoadType.reset(); skipButton.setText("Cancel"); } else { skipButton.setText("Skip"); } setInformation(true); setVisible(); setFocused(); onChange(); }
Constraint::Constraint(ConstraintType constraintType, std::shared_ptr<ConstraintData> data, std::shared_ptr<Representation> representation0, const SurgSim::DataStructures::Location& location0, std::shared_ptr<Representation> representation1, const SurgSim::DataStructures::Location& location1) : m_active(true) { m_mlcpMap[FIXED_3DPOINT] = Math::MLCP_BILATERAL_3D_CONSTRAINT; m_mlcpMap[FIXED_3DROTATION_VECTOR] = Math::MLCP_BILATERAL_3D_CONSTRAINT; m_mlcpMap[FRICTIONAL_3DCONTACT] = Math::MLCP_UNILATERAL_3D_FRICTIONAL_CONSTRAINT; m_mlcpMap[FRICTIONLESS_3DCONTACT] = Math::MLCP_UNILATERAL_3D_FRICTIONLESS_CONSTRAINT; m_mlcpMap[FRICTIONAL_SLIDING] = Math::MLCP_BILATERAL_FRICTIONAL_SLIDING_CONSTRAINT; m_mlcpMap[FRICTIONLESS_SLIDING] = Math::MLCP_BILATERAL_FRICTIONLESS_SLIDING_CONSTRAINT; setInformation(constraintType, data, representation0, location0, representation1, location1); }
// Construct with measurement and variance. SpeedAndBiasError::SpeedAndBiasError(const okvis::SpeedAndBiases& measurement, double speedVariance, double gyrBiasVariance, double accBiasVariance) { setMeasurement(measurement); information_t information; information.setZero(); information.topLeftCorner<3, 3>() = Eigen::Matrix3d::Identity() * 1.0 / speedVariance; information.block<3, 3>(3, 3) = Eigen::Matrix3d::Identity() * 1.0 / gyrBiasVariance; information.bottomRightCorner<3, 3>() = Eigen::Matrix3d::Identity() * 1.0 / accBiasVariance; setInformation(information); }
QImage RemoteSource::takeLoaded() { if (!loaderValid() || !_loader->finished()) { return QImage(); } auto data = _loader->imageData(shrinkBox()); if (data.isNull()) { destroyLoader(CancelledFileLoader); return QImage(); } setInformation(_loader->bytes().size(), data.width(), data.height()); destroyLoader(); return data; }
// Construct with measurement and information matrix SpeedAndBiasError::SpeedAndBiasError(const okvis::SpeedAndBias & measurement, const information_t & information) { setMeasurement(measurement); setInformation(information); }
bool WindowsJob::setLimit(const OJInt32_t timeLimit, const OJInt32_t memoryLimit) { ILogger *logger = LoggerFactory::getLogger(LoggerId::AppInitLoggerId); //限制时间,单位为100ns。 1ms = 10的6次方ns = 10000 * 100ns。 OJInt64_t limitTime = timeLimit * 10000; // ms->100ns int limitMemory = memoryLimit; //bytes if (limitMemory <= 0) //超出int范围了 limitMemory = 128 * 1024 * 1024; //默认128M //设置基本限制信息 JOBOBJECT_EXTENDED_LIMIT_INFORMATION subProcessLimitRes; ZeroMemory(&subProcessLimitRes, sizeof(subProcessLimitRes)); JOBOBJECT_BASIC_LIMIT_INFORMATION & basicInfo = subProcessLimitRes.BasicLimitInformation; basicInfo.LimitFlags = \ JOB_OBJECT_LIMIT_PRIORITY_CLASS | /*限制job优先级*/ \ JOB_OBJECT_LIMIT_PROCESS_TIME | /*限制job时间*/ \ JOB_OBJECT_LIMIT_PROCESS_MEMORY | /*限制job内存*/ \ JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION | /*遇到异常,让进程直接死掉。*/\ JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE | /*进程跟随job一起关闭*/\ JOB_OBJECT_LIMIT_BREAKAWAY_OK; if(useToExcuter_) { basicInfo.LimitFlags |= JOB_OBJECT_LIMIT_ACTIVE_PROCESS; basicInfo.ActiveProcessLimit = 1; } basicInfo.PriorityClass = NORMAL_PRIORITY_CLASS; //优先级为默认 basicInfo.PerProcessUserTimeLimit.QuadPart = limitTime; subProcessLimitRes.ProcessMemoryLimit = limitMemory; if (!setInformation(JobObjectExtendedLimitInformation, &subProcessLimitRes, sizeof(subProcessLimitRes))) { logger->logErrorX(OJStr("[process] - setLimit - can't set job extend info! error:%u"), GetLastError()); return false; } //让完成端口发出时间限制的消息 JOBOBJECT_END_OF_JOB_TIME_INFORMATION timeReport; ZeroMemory(&timeReport, sizeof(timeReport)); timeReport.EndOfJobTimeAction = JOB_OBJECT_POST_AT_END_OF_JOB;//时间到了,通过管道发出信息。 if (!setInformation(JobObjectEndOfJobTimeInformation, &timeReport, sizeof(JOBOBJECT_END_OF_JOB_TIME_INFORMATION))) { logger->logErrorX(OJStr("[process] - setLimit - can't set job end info! error:%u"), GetLastError()); return false; } //UI限制。禁止访问一些资源。 JOBOBJECT_BASIC_UI_RESTRICTIONS subProcessLimitUi; ZeroMemory(&subProcessLimitUi, sizeof(subProcessLimitUi)); subProcessLimitUi.UIRestrictionsClass = JOB_OBJECT_UILIMIT_ALL; if (!setInformation(JobObjectBasicUIRestrictions, &subProcessLimitUi, sizeof(subProcessLimitUi))) { logger->logErrorX(OJStr("[process] - setLimit - can't set job limit info! error:%u"), GetLastError()); return false; } //将作业关联到完成端口,以确定其运行情况,及退出的原因。完成端口可理解为管道,job和应用程序分别位于管道的两端。 //应用程序可以通过管道,查询job的工作状态。 s_mutex_.lock(); ULONG id = ++s_id_; s_mutex_.unlock(); //创建完成端口 iocpHandle_ = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, id, 0); if (NULL == iocpHandle_) { logger->logErrorX(OJStr("[process] - setLimit - create IOCP failed! error:%u"), GetLastError()); return false; } JOBOBJECT_ASSOCIATE_COMPLETION_PORT jobCP; ZeroMemory(&jobCP, sizeof(jobCP)); jobCP.CompletionKey = (PVOID)id; jobCP.CompletionPort = iocpHandle_; if (!setInformation(JobObjectAssociateCompletionPortInformation, &jobCP, sizeof(jobCP))) { logger->logErrorX(OJStr("[process] - setLimit - can't set job CompletionPort info! error:%d"), GetLastError()); return false; } return true; }