Showing posts with label Windows Mobile. Show all posts
Showing posts with label Windows Mobile. Show all posts

10 November, 2011

Как определить есть ли очередь сообщений у треда?

Оказывается все просто и не просто одновременно. Проблемы нам подкладывает само Win32 API - оно при любом удобном случае само создает очередь сообщений для треда, если ее еще не было. Про IsGUIThread() я ничего особого говорить не буду, так как он позволяет узнать то, что нам нужно, только для текущего треда. И, кстати, метод отсутствует в WinCE. На помощь нам придет PostThreadMessage(), но у него есть одна неприятная особенность - тот тред в котором вы его вызвали приобретает очередь сообщений, даром. Поэтому вызывать его для текущего треда бессмысленно. Вот и пришлось для него завести специальный, рабочий тред.

// Note: It works correctly when GetCurrentThreadId() != tid !
//       Current thread will have the message queue after this call!
bool HasThreadMessageQueue(DWORD const tid)
{
  return PostThreadMessage(tid, WM_NULL, 0, 0) || GetLastError() == ERROR_NOT_ENOUGH_QUOTA;
}

21 October, 2009

Полезный тул

Каждый раз с завидным постоянством забываю название утилиты, которая показывает установленные .NET Compact Framework'и. Имя ей - cgacutil.exe. Надеюсь, что теперь не забуду.

30 July, 2009

Пара слов про наследование handles

Все вы наверное не раз пользовались классом System.Diagnostics.Process для запуска процессов из под .NET приложения. Но не все знают что если ProcessStartInfo.UseShellExecute установлен в false, то все handle исходного процесса наследуются дочерним, если конечно иное не указано для конкретного handle. Все вышесказанное касается в одинаковой мере и .NET Framework, и .NET Compact Framework.

P.S. Кстати, всем C++ разработчикам известная, функция fopen по умолчанию не уcтанавливает флаг _O_NOINHERIT. Начиная с Visual Studio 2005 добавлен новый параметр N, который собственно и должен выставлять этот флаг в fopen. Увы в Windows CE нет такой возможности. Более того так как lpSecurityAttributes в функции CreateFile должен быть всегда NULL, то и установить переменную bInheritHandle в SECURITY_ATTRIBUTES тоже невозможно.

18 March, 2009

Банальная разница

Ну все наверно знают функцию GetCommandLine(). Ну скажите какого черта нужно было сделать эту функцию по разному в Windows и в WindowsCE? Ну почему в последнем случае executable file не добавляется в начало в качестве первого аргумента? Другими словами, если мы просто запустили программу без аргументов под WindowsCE, то всегда будем получать пустую строчку в результате вызова GetCommandLine()!

04 February, 2009

Как найти Adaption Kit Updates (AKU)?

Это достаточно важное число и оно по сути эквивалентно номеру ServicePack в обычных Windows. Найти его можно в реестре HKEY_LOCAL_MACHINE\SYSTEM\Versions|Aku

02 December, 2008

Особенности реализации стандартных API функций в WindowsMobile

MSDN for WindowsMobile 5.0

"... If the thread is making a kernel call, SuspendThread fails. An application might need to repeat the SuspendThread several times for it to succeed. ..."

07 November, 2008

How much does Exception Handling cost, really?

Чувак (он же Kevin Frei) толково рассказывает про то как устроен SEH / C++EH мир для x86 и x64. Что, почем и какого дъявола происходит. Тем, кто еще не забыл С++ и еще может читать по слогам ассемблер посвящается...

Короче, установи PowerPoint и тыкай сюда.