-
−140
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
//делает паузу с округлением до целого числа секунд - 1000, 2000 и т.д.
//Использует ВводСтроки с таймаутом, который работает даже если окно теряет фокус ввода.
Процедура Sleep(Таймаут)
Предупреждение("Таймаут " + Строка(Таймаут) + " секунд", Таймаут, "Sleep");
ОбработкаПрерыванияПользователя();
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие(Кнопка)
Если НЕ ВремяНачалаВыполнения = Дата(1,1,1) Тогда
Пока Истина = Истина Цикл
ОбработкаПрерыванияПользователя();
Sleep(45); //Шаг 45 секунд.
Если Час(ТекущаяДата()) = Час(ВремяНачалаВыполнения) И Минута(ТекущаяДата()) >= Минута(ВремяНачалаВыполнения) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//Далее идет обработка перепроведения документов
КонецПроцедуры
Интересная версия выполнить процедуру по времени
AndreyEvtyushin,
30 Сентября 2011
-
+131
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
private bool IsChanged(string name, string surname, string patronymic, string email, bool? sex = null, byte[] avatar = null, DateTime? birthDate = null, string address = null)
{
bool r1 = sex == null ^ Sex == null ? true : (sex != null ? sex.Value != Sex.Value : true);
bool r2 = birthDate == null ^ BirthDate == null ? true : (birthDate != null ? birthDate.Value != BirthDate.Value : true);
bool r3 = address == null ^ Address == null ? true : Address != address;
bool r4 = avatar == null ^ Avatar == null ? true : (avatar != null ? !Avatar.IsEqual(avatar) : true);
bool r = Name != name || Surname != surname || Patronymic != patronymic || Email != email;
return r | r1 | r2 | r3 | r4;
}
dotnetdeveloper,
30 Сентября 2011
-
+144
- 1
- 2
- 3
STATIC_ASSERT(ТНасяльника::ОПЕРАЦИЯ_ЗАПИЛИТЬ != ТНасяльника::ОПЕРАЦИЯ_ВЫПИЛИТЬ);
bool запилить = ТНасяльника::ОПЕРАЦИЯ_ЗАПИЛИТЬ;
ТРавшан равшан(запилить ? ЗАПИЛИТЬ : ВЫПИЛИТЬ);
vayerx,
30 Сентября 2011
-
+145
- 1
http://open-life.org/blog/algorithm/1627.html
Красивое наглядное видео алгоритмов сортировки.
Новичкам может быть полезно, да и просто эстетически приятно.
CKrestKrestGovno,
30 Сентября 2011
-
+162
- 1
if(!empty($arResult["Post"])>0)
Как вы думаете, что это? Правильно, Битрикс!
maxru,
30 Сентября 2011
-
+134
- 1
- 2
if (!(string.IsNullOrEmpty("")))
...
HellMaster_HaiL,
30 Сентября 2011
-
+155
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
#include <iostream>
#include <memory>
#include <assert.h>
using namespace std;
template <class T>
class megaClass
{
public:
void hello()
{
assert(dynamic_cast<T*>(this)!=NULL);
static_cast<T*>(this)->hello();
}
virtual ~megaClass() {}
};
class cleft : public megaClass<cleft>
{
public:
void hello()
{
std::cout << "left::hello()" << std::endl;
}
};
class cright : public megaClass<cright>
{
public:
void hello()
{
std::cout << "right::hello()" << std::endl;
}
};
int main()
{
scoped_ptr<megaClass<cleft> > a1=new cleft;
a1->hello();
scoped_ptr<megaClass<cright> > a2=new cright;
a2->hello();
return 0;
}
Пытался продемонстрировать статический полиморфизм TarasB и получилась такая какашка. Кто действительно крут и может сабдж продемонстрировать? Я где-то видел пример, но не помню где...
Ещё продемонстрировал статический полиморфизм через стратегии:
struct Strategy1
{
static void do(){printf("Lol1");}
};
struct Strategy2
{
static void do(){printf("Lol2");}
};
template<class Strategy>
class MegaClass
{public:
void do()
{
printf("Mega");
Strategy::do();//Класс Strategy можно было и создать для хранения состояния.
printf("/n\");
}
};
//...
Дальше в разных частях кода создаем:
MegaClass<Strategy1> o;
o.do();
//...
MegaClass<Strategy2> o;
o.do();
"Один" класс ведёт себя по разному. Понятно, что это не совсем полиморфизм. Но очень часто именно в таком контексте используют динамический полиморфизм, хотя такого статического здесь достаточно выше крыши.
Плюсы этого подхода :
1)Создаётся объект в стеке, значит быстро, а не в куче. Хотя можно и не в стеке.
2)Используется шаблон, значит компиль будет инлайнить.
Минус:
1)Если понадобится резкой перейти от статического полиморфизма к динамическому - придётся переписывать на виртуальные функции или на истинный статический полиморфизм.
Обсуждения здесь:
http://govnokod.ru/8025#comment110773
Сразу исключим детсадовский вариант статического функционального полиморфизма c перегрузкой функций:Class1 o1;
foo(o1);
Class2 o2;
foo(o2);
void foo(Class1 o){/*...*/};
void foo(Class2 o){/*...*/};
Кто-нибудь реально умеет can into нормальный статический полиморфизм?
CPPGovno,
30 Сентября 2011
-
+30
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
$files = file_scan_directory(dirname(__FILE__) .'/modes/', '^([^\.].*)\.inc$', array('.', '..', 'CVS'), 0, FALSE);
foreach ($files as $file) {
require_once($file->filename);
$mode = $file->name;
if (function_exists('advpoll_info_'. $mode)) {
$advpoll_modes[$mode] = call_user_func('advpoll_info_'. $mode);
}
}
brainstorm,
30 Сентября 2011
-
+169
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
function echeck(str) {
var at="@"
var dot="."
var lat=str.indexOf(at)
var lstr=str.length
// var ldot=str.indexOf(dot)
if (str.indexOf(at)==-1){
alert("Invalid E-mail ID");
return false;
}
if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
alert("Invalid E-mail ID");
return false;
}
if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
alert("Invalid E-mail ID");
return false;
}
if (str.indexOf(at,(lat+1))!=-1){
alert("Invalid E-mail ID");
return false;
}
if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
alert("Invalid E-mail ID");
return false;
}
if (str.indexOf(dot,(lat+2))==-1){
alert("Invalid E-mail ID");
return false;
}
if (str.indexOf(" ")!=-1){
alert("Invalid E-mail ID");
return false;
}
return true;
}
если честно, дочитал где-то только до 15 строки
marg,
30 Сентября 2011
-
+159
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
var resizeTimer,calWidth,$BlockPath,widthLeftPart,widthRightPart,count;
var $headBlock = $('div.hdr');
var $rightBlock = $('li.userFullName');
var $leftBlock = $('li.subMenu-title');
$(document).ready(resizeLabels);
$(window).resize(resizeLabels);
function doResizeLabels($typeBlock) {
count = 2;
resultWidth = 0;
if ($typeBlock==$leftBlock) {
$BlockPath=$('ul.subMenu li:not(.subMenu-title)');
} else {
$BlockPath=$('ul.usersLink li:not(.userFullName)');
};
$BlockPath.each(function() {
eachPosition = $(this).position();
eachWidth = $(this).width();
eachOuterWidth = $(this).outerWidth();
count++;
if ($typeBlock==$leftBlock) {
widthLeftPart = eachPosition.left + eachWidth;
widthPadding = eachOuterWidth - eachWidth;
} else {
if (count==3) widthPadding = eachPosition.left;
widthRightPart = widthRightPart + eachOuterWidth;
};
});
if ($typeBlock==$leftBlock) {
widthLeftPart = widthLeftPart + ((widthPadding / 2) * count);
resultWidth = headWidth/2 - widthLeftPart;
} else {
rightWidth = headWidth/2 - widthRightPart;
resultWidth = rightWidth-(headWidth/2-widthPadding/2)/2;
};
$typeBlock.width(resultWidth);
}
function resizeLabels() {
$leftBlock.width(0);
$rightBlock.width(0);
headWidth = $headBlock.width();
widthLeftPart = widthRightPart = 0;
headWidth = $headBlock.width();
doResizeLabels($leftBlock);
doResizeLabels($rightBlock);
};
Serious_Andy,
30 Сентября 2011