void task(VP_INT exinf) { _toppers_cxxrt_reset_specific(); // タスクの再起動を可能にするための初期化処理 ID tskid = ID(exinf); fork* left = p_fork[(tskid - 1) % 5]; fork* right = p_fork[(tskid - 1 + 4) % 5]; philosopher phil(tskid, left, right); phil.run(); }
int main(int argc, char* argv[]) { boost::thread thrd_chef(&chef); phil p[] = { phil(0), phil(1), phil(2), phil(3), phil(4) }; boost::thread thrd_phil0(thread_adapter(&phil::do_thread, &p[0])); boost::thread thrd_phil1(thread_adapter(&phil::do_thread, &p[1])); boost::thread thrd_phil2(thread_adapter(&phil::do_thread, &p[2])); boost::thread thrd_phil3(thread_adapter(&phil::do_thread, &p[3])); boost::thread thrd_phil4(thread_adapter(&phil::do_thread, &p[4])); thrd_chef.join(); thrd_phil0.join(); thrd_phil1.join(); thrd_phil2.join(); thrd_phil3.join(); thrd_phil4.join(); return 0; }
void UserPresetWindow::buttonClicked (Button* buttonThatWasClicked) { //[UserbuttonClicked_Pre] //[/UserbuttonClicked_Pre] if (buttonThatWasClicked == copyButton) { //[UserButtonCode_copyButton] -- add your button handler code here.. PresetItem *selected = dynamic_cast<PresetItem *>(presetList->getSelectedItem(0)); if(selected) { AlertWindow win(L"Copy Preset", L"Enter a name for the duplicate preset:", AlertWindow::NoIcon); win.addTextEditor(L"presetName", L""); win.addButton(L"Cancel", 0); win.addButton(L"Ok", 1, KeyPress(KeyPress::returnKey)); if(win.runModalLoop()) { String tempstr; File srcPreset = selected->getFile(); tempstr = win.getTextEditorContents(L"presetName"); tempstr << L".fxp"; srcPreset.copyFileTo(srcPreset.getParentDirectory().getChildFile(tempstr)); //A bit hacky, but treeHasChanged() doesn't seem to do anything... selected->getParentItem()->itemOpennessChanged(true); presetList->repaint(); //treeRoot.treeHasChanged(); } } //[/UserButtonCode_copyButton] } else if (buttonThatWasClicked == removeButton) { //[UserButtonCode_removeButton] -- add your button handler code here.. PresetItem *selected = dynamic_cast<PresetItem *>(presetList->getSelectedItem(0)); if(selected) { File parentDir = selected->getFile().getParentDirectory(); if(!selected->getFile().deleteFile()) { AlertWindow::showMessageBoxAsync(AlertWindow::WarningIcon, L"Preset Deletion Error", L"Could not delete preset from the filesystem. Check your permissions."); } else { //If that plugin's directory is now empty, delete it too. if(!parentDir.getNumberOfChildFiles(File::findFilesAndDirectories)) parentDir.deleteFile(); treeRoot.itemOpennessChanged(true); presetList->repaint(); } } //[/UserButtonCode_removeButton] } else if (buttonThatWasClicked == importButton) { //[UserButtonCode_importButton] -- add your button handler code here.. int i; StringArray plugins; for(i=0;i<knownPluginList->getNumTypes();++i) plugins.add(knownPluginList->getType(i)->name); //First get the user to select which plugin the preset is for. AlertWindow whichPlugin(L"Import Preset", L"Select which plugin this preset is intended for:", AlertWindow::NoIcon); whichPlugin.addComboBox(L"plugins", plugins); whichPlugin.addButton(L"Cancel", 0); whichPlugin.addButton(L"Ok", 1, KeyPress(KeyPress::returnKey)); if(whichPlugin.runModalLoop()) { FileChooser phil(L"Import preset", File::nonexistent, L"*.fxp"); if(phil.browseForFileToOpen()) { String pluginName = whichPlugin.getComboBoxComponent(L"plugins")->getText(); File presetDir = File::getSpecialLocation(File::userApplicationDataDirectory).getChildFile(L"Pedalboard2").getChildFile(L"presets"); File pluginDir = presetDir.getChildFile(pluginName); File srcPreset = phil.getResult(); if(!pluginDir.exists()) { if(!pluginDir.createDirectory()) { AlertWindow::showMessageBoxAsync(AlertWindow::WarningIcon, L"Preset Import Error", L"Could not create a directory for this plugin. Check your permissions."); } phil.getResult().copyFileTo(pluginDir.getChildFile(srcPreset.getFileName())); treeRoot.itemOpennessChanged(true); presetList->repaint(); } } } //[/UserButtonCode_importButton] } else if (buttonThatWasClicked == exportButton) { //[UserButtonCode_exportButton] -- add your button handler code here.. PresetItem *selected = dynamic_cast<PresetItem *>(presetList->getSelectedItem(0)); if(selected) { FileChooser phil(L"Export preset", File::nonexistent, L"*.fxp"); if(phil.browseForFileToSave(true)) selected->getFile().copyFileTo(phil.getResult().withFileExtension(L"fxp")); } //[/UserButtonCode_exportButton] } else if (buttonThatWasClicked == renameButton) { //[UserButtonCode_renameButton] -- add your button handler code here.. PresetItem *selected = dynamic_cast<PresetItem *>(presetList->getSelectedItem(0)); if(selected) { AlertWindow win(L"Rename Preset", L"Enter a new name for the selected preset:", AlertWindow::NoIcon); win.addTextEditor(L"presetName", L""); win.addButton(L"Cancel", 0); win.addButton(L"Ok", 1, KeyPress(KeyPress::returnKey)); if(win.runModalLoop()) { File newFile = selected->getFile().getParentDirectory(); newFile = newFile.getChildFile(win.getTextEditorContents(L"presetName")).withFileExtension(L"fxp"); selected->getFile().moveFileTo(newFile); selected->getParentItem()->itemOpennessChanged(true); presetList->repaint(); } } //[/UserButtonCode_renameButton] } //[UserbuttonClicked_Post] //[/UserbuttonClicked_Post] }
void Scanner::run() { std::vector<double> kernelWidth; std::vector<double> windowSize; std::vector<double> peakThreshold; std::vector<double> floorThreshold; std::vector<int> signalFindingIterations; std::vector<double> reclusterThreshold; std::ostringstream dispstr; dispstr << "--------------------SCAN PARAMETERS:\n--------------------\n\n"; //----- Read configuration file ----- std::ifstream phil(m_configFile); if(!(phil.is_open())){ hide(); return; } std::string line; boost::char_separator<char> sep(":"); while(getline(phil,line)){ dispstr << line << "\n"; boost::tokenizer< boost::char_separator<char> > tokens(line,sep); boost::tokenizer< boost::char_separator<char> >::iterator tit = tokens.begin(); std::string param = *tit; tit++; boost::char_separator<char> sep2(","); boost::tokenizer< boost::char_separator<char> > tokens2(*tit,sep2); if(param.compare("kernel width") == 0){ for(const auto& t2 : tokens2) kernelWidth.push_back(boost::lexical_cast<double>(t2)); } else if(param.compare("window size") == 0){ for(const auto& t2 : tokens2) windowSize.push_back(boost::lexical_cast<double>(t2)); } else if(param.compare("peak threshold") == 0){ for(const auto& t2 : tokens2) peakThreshold.push_back(boost::lexical_cast<double>(t2)); } else if(param.compare("floor threshold") == 0){ for(const auto& t2 : tokens2) floorThreshold.push_back(boost::lexical_cast<double>(t2)); } else if(param.compare("signal finding iterations") == 0){ for(const auto& t2 : tokens2) signalFindingIterations.push_back(boost::lexical_cast<int>(t2)); } else if(param.compare("recluster threshold") == 0){ for(const auto& t2 : tokens2) reclusterThreshold.push_back(boost::lexical_cast<double>(t2)); } } phil.close(); //----------------------------------- dispstr << "\n--------------------\nINPUT FILES:\n--------------------\n\n"; //----- Load images ----- int tot_tasks = 0; std::vector<int> series_ntasks; std::vector< std::vector<ImRecord*>* > templateRecords; m_fileManager = new FileManager(); for(std::vector<std::string>::iterator fit = m_inputFiles.begin(); fit != m_inputFiles.end(); fit++){ dispstr << *fit << "\n"; ImageAnalysisToolkit tmp; std::vector<ImRecord*>* recs = new std::vector<ImRecord*>(); recs->clear(); FileManager::input_file infile = FileConverter::read(m_fileManager,&tmp,recs,*fit,nia::niaVersion); templateRecords.push_back(recs); int itasks = infile.np * infile.nt; series_ntasks.push_back(itasks); tot_tasks += itasks; m_fileManager->addInputFile(infile); } m_textBuffer->set_text(dispstr.str()); show_all_children(); tot_tasks *= kernelWidth.size()*windowSize.size()*peakThreshold.size()*floorThreshold.size()*reclusterThreshold.size()*signalFindingIterations.size(); m_progressWindow.launch(tot_tasks); m_fileManager->reset(); ImSeries* m_data = m_fileManager->loadNext(); int seriesID = 0; int scanID = 0; while(m_data){ for(std::vector<double>::iterator kwit = kernelWidth.begin(); kwit != kernelWidth.end(); kwit++){ for(std::vector<double>::iterator wsit = windowSize.begin(); wsit != windowSize.end(); wsit++){ for(std::vector<double>::iterator ptit = peakThreshold.begin(); ptit != peakThreshold.end(); ptit++){ for(std::vector<double>::iterator ftit = floorThreshold.begin(); ftit != floorThreshold.end(); ftit++){ for(std::vector<double>::iterator rtit = reclusterThreshold.begin(); rtit != reclusterThreshold.end(); rtit++){ for(std::vector<int>::iterator sfit = signalFindingIterations.begin(); sfit != signalFindingIterations.end(); sfit++){ ImageAnalysisToolkit* toolkit = new ImageAnalysisToolkit(); toolkit->setSaturationThreshold(65534); toolkit->setKernelWidth(*kwit); toolkit->setLocalWindow(*wsit); toolkit->setPeakThreshold(*ptit); toolkit->setFloorThreshold(*ftit); toolkit->setReclusterThreshold(*rtit); toolkit->setMaxSignalFindingIterations(*sfit); std::vector<ImRecord*>* scanRecs = new std::vector<ImRecord*>(); scanRecs->clear(); for(int i = 0; i < series_ntasks[seriesID]; i++) scanRecs->push_back(templateRecords[seriesID]->at(i)->emptyCopy()); m_records.push_back(scanRecs); for(int i = 0; i < scanRecs->at(0)->nSynapseCollections(); i++) toolkit->addSynapseDefinition(scanRecs->at(0)->getSynapseCollection(i)->emptyCopy()); m_ntasks.push_back(series_ntasks[seriesID]); for(int ps = 0; ps < m_data->npos(); ps++){ for(int tm = 0; tm < m_data->nt(); tm++){ while(m_activeThreads == m_maxThreads) boost::this_thread::sleep(boost::posix_time::millisec(60000)); m_mtx.lock(); m_threadpool.create_thread(boost::bind(&Scanner::run_analysis, this, m_data, toolkit, scanID, ps, tm, seriesID)); m_activeThreads++; boost::this_thread::sleep(boost::posix_time::millisec(1000)); m_mtx.unlock(); } } boost::this_thread::sleep(boost::posix_time::millisec(1000)); scanID++; } } } } } } m_threadpool.join_all(); nia::nout << "Finished parameter scan for sample " << m_fileManager->getName(seriesID) << "\n"; delete m_data; m_data = m_fileManager->loadNext(); seriesID++; } delete m_fileManager; hide(); //----------------------- }