User Tag List

Страница 26 из 101 ПерваяПервая ... 222324252627282930 ... ПоследняяПоследняя
Показано с 251 по 260 из 1003

Тема: Эмулятор терминала типа VT52

  1. #251

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,221
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Что-то с хуками все же не чисто.

    Все работает, но, когда переключаюсь с эмуляторного окна на окно консоли (которое у меня информационно-отладочное), все жутко начинает тормозить. Даже если в обработчике хука стоит просто переход по цепочке на следующий хук. Убираю хук - все работает быстро.
    Пока что загадка.

  2. #252

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    все жутко начинает тормозить
    Это проблема реализации. Может быть связано с тем, что сообщения об утрате фокуса прежним окном и получении фокуса новым окном приходят в эти окна в произвольной последовательности относительно друг друга.

  3. #253

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,221
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Это проблема реализации. Может быть связано с тем, что сообщения об утрате фокуса прежним окном и получении фокуса новым окном приходят в эти окна в произвольной последовательности относительно друг друга.
    Всякое может быть, но вряд ли зависит от этого, т.к. хук абсолютно пустой и ничего не делает. Просто передает дальше - и все равно тормозит.

  4. #254

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    все равно тормозит.
    Чудес не бывает - комп тормозит тогда, когда что-то делает. Можно вставить в хук отладочную печать на экран консоли - сообщения должны появляться только при нажатиях на клавиши.

  5. #255

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,221
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Чудес не бывает - комп тормозит тогда, когда что-то делает. Можно вставить в хук отладочную печать на экран консоли - сообщения должны появляться только при нажатиях на клавиши.
    Мне все же кажется, что это накладки из-за того, что хук не в длл. Попробую выяснить.

  6. #256

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Мне все же кажется, что это накладки из-за того, что хук не в длл. Попробую выяснить.
    Быть такого не может - между EXE и DLL нет практически ни какой разницы. Скорее - там где-то Sleep( x ) всех спать отправляет.

    ---------- Post added at 13:05 ---------- Previous post was at 12:47 ----------

    Разборщик сообщений в хук-тесте выглядит так:
    Код:
    	dword uTC = GetTickCount();
    	
    	MSG      msg;
    	for(;;)
    	{
    		if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
    		{
    			TranslateMessage( &msg );
    			DispatchMessage( &msg );
    			if( msg.message == WM_QUIT ) break;
    		}
    
    		Sleep(1);
    
    		if( GetTickCount() - uTC > 20000 ) { break; }
    	};
    Строчка Sleep(1); применена для того, чтобы не отбирать у процессора слишком много времени.

    Но при этом - разборщик не может обработать больше 1000 сообщений в секунду. Если сообщений будет приходить больше ( что в данном тесте полностью исключено ) - сообщения перестанут обрабатываться в реальном времени и всё начнёт дико тормозить.

  7. #256
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #257

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,221
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Выяснил, где у меня подтормаживает.

    Код:
    	if (PeekMessage(&msg, NULL, 0, 0, 0)) {
    		if (GetMessage(&msg, NULL, 0, 0)) {		// Получить сообщение
    			TranslateMessage(&msg);				// Если сообщение не QUIT,
    			DispatchMessage(&msg);				// оттранслировать его окну
    		}
    		else 	SysExit();						// Иначе выйти закрыв все устройства
    	}
    При отладке дебаггером, тормозят две строчки PeekMessage и GetMessage. Причем ТОЛЬКО если есть хук, даже пустой, установленный моей программой. Тормозят где-то по 2-3 секунды каждая, потом программа идет далее.

    ---------- Post added at 14:15 ---------- Previous post was at 14:09 ----------

    Думаю, что дело в хуке.

    В режиме, когда подвисают PeekMessage и т.д. (а это когда активно консольное окно эмулятора), функция хука, хотя и установлена, ПЕРЕСТАЕТ работать. Это определяется просто - печатаю в специальное окно сообщение 'Hool action', когда хук вызывается. Так вот в этом режиме оно перестает печататься. Это значит, что функция хука пропадает, и возможно на ней все и подвисает.

    ---------- Post added at 14:17 ---------- Previous post was at 14:15 ----------

    Обработчик хука таков:

    Код:
    LRESULT CALLBACK KeyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
    {
    
    	printf("Hook action\n");
    
    	return CallNextHookEx(hhKeyboardHook, nCode, wParam, lParam);
    }
    Подвисает при активном консольном окне хоть с со строчкой printf, хоть без нее. И прекрасно работает при переключении на окно эмулятора.

    Инициализация хука такая:

    hhKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHook, hInst, 0); // Установить глобальный хук клавиатуры

  9. #258

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Код:
    	if (PeekMessage(&msg, NULL, 0, 0, 0)) {
    		if (GetMessage(&msg, NULL, 0, 0)) {		// Получить сообщение
    			TranslateMessage(&msg);				// Если сообщение не QUIT,
    			DispatchMessage(&msg);				// оттранслировать его окну
    		}
    		else 	SysExit();						// Иначе выйти закрыв все устройства
    	}
    То же самое можно сделать проще:
    Код:
    	if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
    	{
    		if ( msg.message != WM_QUIT )
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    		else
    		{
    			SysExit();
    		}
    	}

  10. #259

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,221
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    То же самое можно сделать проще
    Это не проще, и сути проблемы не меняет)

  11. #260

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я ни разу не пользовался отладчиком и компилю всегда сразу в Release, поэтому (возможно) с описанными проблемами ни разу не столкнулся.

    ---------- Post added at 13:26 ---------- Previous post was at 13:24 ----------

    Цитата Сообщение от Titus Посмотреть сообщение
    Это не проще
    Проще ровно в 2 раза ( сообщение извлекается из очереди за один вызов, а не за два ).

Страница 26 из 101 ПерваяПервая ... 222324252627282930 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)

Похожие темы

  1. [Аукционъ] Клавиатура от терминала ЕС-7927
    от BYTEMAN в разделе Барахолка (архив)
    Ответов: 18
    Последнее: 15.05.2012, 14:50
  2. Срочно ищу монитор от терминала 15ИЭ-00-013 (от ДВК-2)
    от dk_spb в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 10.02.2012, 10:19
  3. Куплю клавиатуру КМ-035 для терминала СМ 7238
    от Kronshou в разделе Барахолка (архив)
    Ответов: 5
    Последнее: 13.09.2010, 23:33
  4. C64 или C128 в качестве терминала под Linux
    от Vinnny в разделе Commodore 16/64/128
    Ответов: 6
    Последнее: 14.12.2007, 16:39
  5. Подгрузка pc-файла типа "codes" в эмулятор
    от maximk в разделе Эмуляторы
    Ответов: 15
    Последнее: 13.11.2006, 15:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •