
c# + TaoFramework вопрос про работу с потоками.
Всем доброе утро, скажите, почему при зацикливании какого-либо куска кода, ответственного за отрисовку изображение не выводится на экран ? Вот, во всех уроках используется таймер, который в некоторые промежутки времени вызывает функцию отрисовки и это работает. Но [spoiler], если зациклить эту же функцию и стопить поток , например, Thred.Sleep(TimeSpan.FromMiliceconds(300)), то работать не будет. Почему так происходит ? Вопрос возник потому, что почему-то основное окно зависает, если выполняются какие-либо другие потоки, хотя все функции OpenGL вызываются из одного ( главного) потока. В следующем коде так и происходит, и почему-то потоки "самоубиваются" в процессе. Уже 3 дня не могу понять почему. Вообще, задание такое : есть n квадратов , для каждого квадрата свой поток. Квадраты двигаются в некотором направлении. При столкновении один из квадратов-потоков убивается, другой увеличивается в размере.
Изначально написал так, что каждый квадрат это объект, который может просчитывать свою позицию и отрисовывать себя в нужном месте. Не заработало. Как понял, все openGL функции должны использоваться в том потоке, где был определен контекст рендеринга. Переделал отрисовку в основном потоке. Все равно не заработало, причем странно то, что даже овно приложения не создавалось. В общем, привожу ниже последний вариант, он работате пару итераций а потом окно виснет и почему-то потоки убиваются. . . уже не знаю что с этим делать =((( Вообще можно ли Tao использовать в многопточном приложении ? Скорее всего это я где-то ошибся. . .
неужели придется рисовать в консоли...блин, если в пятницу не сдам, зачета не будет. . . =((
Изначально написал так, что каждый квадрат это объект, который может просчитывать свою позицию и отрисовывать себя в нужном месте. Не заработало. Как понял, все openGL функции должны использоваться в том потоке, где был определен контекст рендеринга. Переделал отрисовку в основном потоке. Все равно не заработало, причем странно то, что даже овно приложения не создавалось. В общем, привожу ниже последний вариант, он работате пару итераций а потом окно виснет и почему-то потоки убиваются. . . уже не знаю что с этим делать =((( Вообще можно ли Tao использовать в многопточном приложении ? Скорее всего это я где-то ошибся. . .
|
неужели придется рисовать в консоли...блин, если в пятницу не сдам, зачета не будет. . . =((
Все доброе утро, скажите, почему при зацикливании какого-либо куска кода, ответственного за отрисовку изображение не выводится на экран? Вот, во всех уроках используется таймер, который в некоторые промежутки времени вызывает функцию отрисовки и это работает. Но, если зациклить эту же функцию и стопить поток, например, Thred.Sleep(TimeSpan.FromMiliceconds(300)), то работать не будет. Почему так происходит?
Я ознакомился только частично/вскользь (просто сейчас очень занят).
У вас
AnT.Invalidate();
Вызывается единожды — попробуйте добавить его во все зацикленные куски кода, например вместо Thred.Sleep(TimeSpan.FromMiliceconds(300)).
Просто мне с первых слов показалось что вся проблема как раз в том, что ваши зацикленные куски кода не обновляют окно.
Если это не поможет — я позже постараюсь глянуть подробнее.
Попробовал вообще убрать Tao Framework, т.е вообще пустая форма. Происходит та же история, дело тут не в ОпенДжежеле: что-то с потоками накосячил… буду искать ошибку.