![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 02.03.2017
Сообщений: 3
|
![]()
Здравствуйте! Подскажите, в какую сторону двигаться. Суть такая: нажимаю на одну кнопку, происходит подключение к сокету (тут все нормально), нажимаю на другую и начинаю считывать строки. Пока информация считывается приложение-клиент зависает и на другие кнопки не реагирует, к примеру, на кнопку разрыва соединения. Так же строки не отображаются, пока не закончится передача. Почему такое происходит понятно – пока не выйду из бесконечного цикла считывания из сокета, не завершится событие, следовательно все виснит и ничего не сделать. Конечно все отвисает когда передача закончится.
Мне нужно сделать так, чтобы после нажатия на кнопку начиналась передача (это есть), но пока данные передаются я мог спокойно, к примеру, разорвать соединение, если сокет пуст, или подключиться к другому серверу, в общем дальше работать с приложением, а то я даже его закрыть без зависания и ошибки не могу. Так же надо чтобы информация отображалась по мере поступления, а не после завершения события (эта задача второстепенная но тоже важная). Получаемые строки вывожу в listbox. Надеюсь ясно описал проблему. Windows form, C++. Код кнопки, которая пр нажатии посылает серверу сообщение, что можно начинать передачу, в бесконечном цикле считывает строки и выводит их в listbox. Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,829
|
![]()
Есть стандартные 3 пути:
1. Выносить сетевую часть в отдельный поток 2. Использовать асинхронные операции 3. "Имитировать" асинхронность - например, проверять наличие данных селектом c маленьким таймаутом и пока их нет выполнять что-то другое |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 02.03.2017
Сообщений: 3
|
![]()
Можно расписать более подробно?
Пока с этим не сталкивался, может есть какой-нибудь простенький пример, тема или статья? Какими методами пользоваться? |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,829
|
![]()
Что именно расписать? Вы склоняетесь более в ВинАПИ сторону или в дот нет? Или может вообще буст вас спасет...
|
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 02.03.2017
Сообщений: 3
|
![]()
Пока мне вообще не ясно в какую сторону шагать, сейчас лучше самый простой способ. Может асинхронные операции?
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,829
|
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Зависает форма при закрытии порта | Принтер | C# (си шарп) | 1 | 24.12.2015 15:15 |
C# WPF Зависает форма при использовании awesomium (замена webbrowser) | Senk | WPF, UWP, WinRT, XAML | 8 | 17.10.2013 18:44 |
Зависает при считывании данных | Aleksandr | Общие вопросы Delphi | 2 | 04.10.2013 10:30 |
Форма зависает | AcTiV | Общие вопросы .NET | 2 | 17.09.2013 17:42 |
При выполнении кода форма зависает. Как вывести прогрессбар? | plato | Общие вопросы Delphi | 4 | 06.01.2010 15:37 |