//Запуск нового процесса public void StartProcess(string process, //Имя процесса params Tuple <string, int>[] bounds) //Ограничения на количества процессов, которые должны быть соблюдены { while (true) { lock (_providersLock) { bool b = false; foreach (var bound in bounds) { b |= _providers.Get(bound.Item1, 0) >= bound.Item2; } if (!b) { break; } } Thread.Sleep(100); } lock (_providersLock) { if (!_providers.ContainsKey(process)) { _providers.Add(process, 1); } else { _providers[process]++; } } }
public static bool GetBool(this DicS <string> dic, string key) { if (dic == null || !dic.ContainsKey(key)) { return(false); } string s = dic[key].ToUpper(); return(s == "TRUE" || s == "ДА"); }
public static int GetInt(this DicS <string> dic, string key, int defval = 0) { int res; if (dic == null || !dic.ContainsKey(key) || !int.TryParse(dic[key], out res)) { return(defval); } return(res); }
//То же самое, но база данных не задается public void SaveDicToTable <T>(DicS <T> dic, string tabl, string keyField = "Code", string keyField2 = "", string delField = "Del") where T : ISaveToRecDao { var old = new SetS(); var add = new SetS(); using (var rec = new RecDao(this, tabl, RecordsetTypeEnum.dbOpenTable)) while (rec.Read()) { var code = rec.GetString(keyField); if (!keyField2.IsEmpty()) { code += "." + rec.GetString(keyField2); } if (dic.ContainsKey(code)) { old.Add(code); } else { rec.Put(delField, true); } } Execute("DELETE * FROM " + tabl + " WHERE " + delField + "=True"); foreach (var ap in dic.Keys) { if (!old.Contains(ap)) { add.Add(ap); } } using (var rec = new RecDao(this, tabl, RecordsetTypeEnum.dbOpenTable)) { while (rec.Read()) { dic[rec.GetString(keyField) + (keyField2.IsEmpty() ? "" : ("." + rec.GetString(keyField2)))].ToRecordset(rec, false); } foreach (var p in add.Keys) { dic[p].ToRecordset(rec, true); } } }
//Существует ли поле в рекордсете public bool ContainsField(string fname) { return(_fields.ContainsKey(fname)); }