Алекс Лочер
10:30 04-07-2007
Интересно, что было со мной в ночь с 12е на 13го июня, если утром 13го (судя по логам) я написал вот такое:

public void ExecuteCommand(AbstractMessage msg)
{
MessageDelegate dlgt = new MessageDelegate(ExecuteCommand);
dlgt.BeginInvoke(msg, null, null);
}


Однако, новый тип бесконечной рекурсии: не приводит к переполнению стека

Вообще, что-то слишком много ляпов в коде стало последнее время.
Не доволен собой.
Комментарии:
Arkane
11:00 04-07-2007
В отпуск, Лочер! Срочно!
Алекс Лочер
11:02 04-07-2007
Да-да. Два дня осталось - и на природу.
JimmyM
11:42 04-07-2007
я в С-ях понимаю плохо, но этот самый... который по New создается - он создается не в стеке ?
Алекс Лочер
11:48 04-07-2007
JimmyM это не С, это C#.
Идея в том, что MessageDelegate - это делегат - ну, упрощенно говоря, что-то вроде указателя на функцию. Т.е. функция создает указатель сама на себя - и вызывает его. Но вызывает в другом потоке (thread), при этом вызывает асинхронно - т.е. вызвавший поток не ждет окончания "вложенного" вызова, а продолжает выполнение (на деле не продолжает, а заканчивается, так как кроме выложенного вызоыва в нем больше ничего и нет). Соответсвенно, глубина используемого стека практически не возрастает.

Вообщем, глубокий бред.
JimmyM
11:56 04-07-2007
Алекс Лочер хм... да, это сильно