Консультация № 142423
27.08.2008, 19:11
0.00 руб.
0 4 0
Здравствуйте.
Я решил написать небольшую многопользовательскую сетевую игру. Соответственно есть сервер и клиент. Клиент работает в два потока: один поток - рисование 3д-графики, второй - посылка сообщений серверу и получение от него ответов. Всё бы хорошо, да в таком режиме прога отказывается обрабатывать события формы, то есть оба потока работают нормально, всё рисуется, всё отсылается, но события не обрабатываются, соответственно прога никак не реагирует на клавиатуру и мышку. Что делать?

Обсуждение

Неизвестный
27.08.2008, 20:40
общий
Вставлять цикл обработки сообщений в тот поток, который занимается анализом сообщений - скорее всего это сетевой поток, а не рисующий. Приведите код как посылаете и принимаете сообщения по сети. Возможно достаточно вставить в нужном месте Application.ProcessMessages.
Неизвестный
27.08.2008, 22:33
общий
Огромное спасибо! Всё заработало. Только медленно. Как объяснить то что просто отрисовка 3д графики работает намного быстрее чем она же в одном из двух потоков, при этом второй поток выключен?
Неизвестный
28.08.2008, 21:54
общий
Без кода трудно понять. Может где-то стоят ненужные ожидания, может синхронизация с VCL вызывается слишком часто, может перерисовки провоцируются чаще на канве формы. Потрассируйте какое место тормозит во внутренний лог, а потом посмотрите - может все станет ясно.
Неизвестный
28.08.2008, 23:02
общий
спасибо
Форма ответа