Доброго времени суток ! помогите с ReadFileEx - измучился я уже. код в приложении, GetLastError ошибки не дает, просто "функция обратного вызова" не вызывается :( примеров в инете я не нашел - только упоминание, что асинхронные операции с файлами можно сделать так. По идее - это тоже, что и ReadFile, но с указанием функции, которая будет вызываться, однако ничерта не работает и ошибки не дает :(( заранее спасибо
Здесь дело в том, что функция, указанная в последнем параметре вызова ReadFileEx() (в данном случае это Callback_ReadFile()), вызывается тогда, когда ввод завершён и вызвавший поток находится в состоянии ожидания сигнала. Это сделано с той целью, чтобы не прерывать поток, если он занят работой. То есть, чтобы всё заработало, необходимо вызвать ReadFileEx(), а затем когда-нибудь сообщить системе: "мне нефига делать и я жду всяких там событий, могу и ввод из файла обработать". Это делают функции SleepEx(), MsgWaitForMultipleObjectsEx(), WaitForSingleObjectEx(), WaitForMultipleObjectsEx(). Для проверки данного факта я написал небольшую программу, где всё это показано. Программа написана на ассемблере (я на др. не умею), при этом логика работы будет вполне понятна.
Приложение: Ответ отправлен: 13.05.2004, 08:49 Отправитель: Foamplast
Вопрос № 173
Здрастуйте уважаемые эксперты.... Если модите помогите коллеге (правда в другой области программирования)!!! Мне нужны Api-функции для выключения и перезагрузки компа в Windows 2000(Xp)! Заранее благодарен!
Ответ отправлен: 13.05.2004, 08:56 Отправитель: Foamplast Отвечает chebv
Здравствуйте, Acid Burn! Используй функцию BOOL ExitWindowsEx( UINT uFlags, // shutdown operation DWORD dwReason // shutdown reason ); В частности, uFlags может принимать значения EWX_SHUTDOWN, EWX_REBOOT. Для того, чтобы перезагрузить/выключить компьютер в Windows 2000(Xp)нужно иметь соответствующие права. (См. приложение)
Приложение: Ответ отправлен: 12.05.2004, 10:28 Отправитель: chebv Отвечает --- Нет данных ---
Здравствуйте, Acid Burn! Функция выключает компьютер. Если надо его перегрузить, то смотри параметры ExitWindowsEx() BOOL WINAPI SystemShutdown(VOID){ HANDLE hToken; TOKEN_PRIVILEGES tkp; if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return( FALSE ); LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); if(GetLastError() != ERROR_SUCCESS) return FALSE; if(!ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0)) return FALSE; return TRUE; } Ответ отправлен: 12.05.2004, 09:16 Отправитель: --- Нет данных ---
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.