Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор терминала типа VT52 (http://zx-pk.ru/showthread.php?t=20092)

Titus 2nd January 2013 21:56

Quote:

Originally Posted by Patron (Post 564066)
Надо вставить туда печать в файл и проверить, закрывается ли он сам при выходе из программы.

Все же желательно ему послать команду, только не помню как.

---------- Post added at 20:56 ---------- Previous post was at 20:55 ----------

Хотя, конечно, закрывается. Как и все открытые файлы, и много чего еще.

Patron 2nd January 2013 21:59

Quote:

Originally Posted by Titus (Post 564067)
Все же желательно ему послать команду

PostThreadMessage

Quote:

Хотя, конечно, закрывается. Как и все открытые файлы, и много чего еще.
Имелась в виду проверка ( при помощи печати в файл ), получают ли все потоки процесса WM_QUIT при выходе из программы.

Titus 2nd January 2013 22:16

Quote:

Originally Posted by Patron (Post 564070)
PostThreadMessage

Имелась в виду проверка ( при помощи печати в файл ), получают ли все потоки процесса WM_QUIT при выходе из программы.

На сколько я знаю - да.

---------- Post added at 21:16 ---------- Previous post was at 21:01 ----------

Безобразие! Если послать WM_QUIT потоку слишком быстро, вскорости после создания, то это сообщение ему не доходит, и он не закрывается.
Стало быть надо еще проверять, а не создан ли уже поток успешно. Фиг проверишь. Надо вводить переменную флага внутри него.
А вообще, нафиг. Раз при закрытие программы, все потоки закрываются, ну и фиг с ним - закроется сам.

Patron 2nd January 2013 22:23

Quote:

Originally Posted by Titus (Post 564071)
фиг с ним - закроется сам.

Думаю, главное - чтобы в потоке был разборщик сообщений.

У меня разборщик есть только в потоке интерфейса, а остальные потоки сообщения не проверяют.
Возможно, как раз по этой причине эмулятор ДВК "застревает" в памяти примерно в 10% случаев.

Titus 2nd January 2013 22:25

Quote:

Originally Posted by Patron (Post 564074)
Думаю, главное - чтобы в потоке был разборщик сообщений.

У меня разборщик есть только в потоке интерфейса, а остальные потоки сообщения не проверяют.
Возможно, как раз по этой причине эмулятор ДВК "застревает" в памяти примерно в 10% случаев.

Мне кажется, что когда процесс закрывается, он и все потоки должен свои прибивать. Как иначе?

Patron 2nd January 2013 22:38

Quote:

Originally Posted by Titus (Post 564075)
Мне кажется, что когда процесс закрывается, он и все потоки должен свои прибивать. Как иначе?

Главный поток выходит из WinMain, но программа остаётся в памяти. Надо будет сделать отладочную печать при выходе из каждого потока и проверить - завершаются ли они все в случаях "застревания".

Ведь выход из WinMain - это ещё не завершение процесса. В CRT есть код и перед вызовом WinMain, и после выхода из WinMain.

Titus 2nd January 2013 22:48

Quote:

Originally Posted by Patron (Post 564078)
Главный поток выходит из WinMain, но программа остаётся в памяти. Надо будет сделать отладочную печать при выходе из каждого потока и проверить - завершаются ли они все в случаях "застревания".

Думаю, что это не просто, т.к. все файлы, которые созданы процессом, тоже закрываются, и может просто не успеть в него напечататься. А может и успеет, не знаю)

Patron 3rd January 2013 02:58

Quote:

Originally Posted by anasana (Post 564145)
OutputDebugString в VisualStudio вроде держится "до последнего".

Можно просто не выходить из WinMain, пока все потоки не "дадут добро".

Titus 4th January 2013 01:46

Кстати, раз ты уж такой хороший виндовый системщик, может подскажешь решение такой проблемы.
Мне необходимо синхронизироваться с VBlank. Для этого я использую функцию lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND,NULL) - это из DirectGraphics. Все замечательно, только эта функция отбирает быстродействие, пока ждет вертикального гашения луча. Т.е. запустил, и все, поцесс ожидания берет на себя все быстродействия компьютера. Это совершенно не айс. Мне нужнен аналог этой функции, который не берет быстродействия на себя, а аналогичен Sleep(). Или же чтобы во время VBlank пришел какой-нить колбек и разбудил мой процесс.
Спрашивал на программистких форумах, внятного ответа не увидал.

---------- Post added at 00:46 ---------- Previous post was at 00:42 ----------

И еще, какие есть возможности в винде для засыпания процесса на некоторое время кроме Sleep? Нет ли засыпания на фиксированное время с точностью до микросекунд? Потому что в слип задержка топорная. Где-то я читал, что на Sleep влияет timeBeginPeriod(), но работает не у всех.

Titus 4th January 2013 04:45

Вычитал, что в интерфейсе IDirect3DDevice9Ex вроде бы есть функция WaitForVBlank, которая действительно умеет засыпать до начала кадра. Но, судя по докам:

Quote:

DirectX 9.0L:

Предоставляет дополнительные интерфейсы IDirect3D9Ex и IDirect3DDevice9Ex с функциональностью, доступной лишь через LDDM-драйверы ОС Windows Vista.
Т.е. этот дополнительный интерфейс работает начиная с Висты? Проверить не могу, т.к. у меня нет вообще SDK 9, есть только 8, потому что Visual Studio 2003.


All times are GMT +4. The time now is 02:42.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.