Добрый день. У меня Win2000SP4 CV++ 6.0 Купил эту замечательную книгу читаю. Решил попробовать новые знания, написал тут програмку. Организуем объект типа "задание", накладывает ограниечение по используемой памяти и вносит в это задание процесс. Код (Text): #include "stdafx.h" //#include "CmnHdr.h" #include <winnt.h> #include <windowsx.h> #include <process.h> // for _beginthreadex #include <tchar.h> #include <stdio.h> //#include "Job.h" int main(int argc, char* argv[]) { HANDLE m_hJob; PSECURITY_ATTRIBUTES psa; PCTSTR pszName; JOBOBJECT_EXTENDED_LIMIT_INFORMATION joeli = { 0 }; STARTUPINFO si = { sizeof(si) }; PROCESS_INFORMATION pi; TCHAR sz[] = TEXT("CMD"); //DWORD dwDesiredAccess; //BOOL fInheritHandle; //m_hJob = CreateJobObject(psa, TEXT("JobLab")); m_hJob = CreateJobObject(NULL, NULL); joeli.BasicLimitInformation.LimitFlags = 0; joeli.BasicLimitInformation.LimitFlags | JOB_OBJECT_LIMIT_PROCESS_MEMORY; joeli.ProcessMemoryLimit = s * 1024 * 1024; SetInformationJobObject(m_hJob,\ JobObjectExtendedLimitInformation,\ joeli,\ sizeof(*pjoeli)); CreateProcess(NULL, sz, NULL, NULL,FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi); // Set Basic and Extended Limits AssignProcessToJobObject(m_hJob, pi.hProcess) ResumeThread(pi.hThread); CloseHandle(pi.hThread); HANDLE h[2]; h[0] = pi.hProcess; h[1] = hjob; DWORD dw = WaitForMultipleObjects(2, h, FALSE, INFINITE); switch (dw - WAIT_OBJECT_0){ case 0: // процесс завершился break; case 1: // лимит процессорного времени исчерпан break; } // проводим очистку CloseHandle(pi.hProcess); CloseHandle(hjob); return 0; } Дальше начать компилить и выдало ошибки - Код (Text): c:\program files\microsoft visual studio\vc98\include\winnt.h(152) : error C2146: syntax error : missing ';' before identifier 'WCHAR' c:\program files\microsoft visual studio\vc98\include\winnt.h(152) : fatal error C1004: unexpected end of file found Error executing cl.exe. Непонятно что даже делать с этим winnt.h, ну не редактировать же его ??? Может я чего еще не знаю из каких-то дополнительных настроек? Помогите пожалуйста.
young_man Afaik компилятор не понял что-такое CONST (в 152 строке), который определен в windef.h. Резюме: до подключения winnt.h необходимо подключить windows.h. У Рихтера он подключается внутри CmnHdr.h.
А вот еще извините - вопрос. Где описана структура - JOBOBJECT_EXTENDED_LIMIT_INFORMATION??? Поиск по диску в файлах *.h ничего, к сожалению, не дал. Как тогда компилировать такую программу ? Код (Text): #define _WIN32_WINNT 0X500 #include <windows.h> int main(int argc, char* argv[]) { HANDLE hjob=CreateJobObject(NULL,NULL); JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 }; jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; return 0; } ... постоянно не находит она эту структуру А в примерах , которыя найдены googl - ом так подключена только #include <windows.h> Код (Text): : error C2065: 'JOBOBJECT_EXTENDED_LIMIT_INFORMATION' : undeclared identifier : error C2146: syntax error : missing ';' before identifier 'jeli' : error C2065: 'jeli' : undeclared identifier . . . : error C2065: 'JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE' : undeclared identifier Подскажите, кто с "заданиями" по Рихтеру возился ?
Stub IceStudent ... с боями скачал PSDK, инсталлировал. В папке C:\Program Files\Microsoft Platform SDK получил нужный набор *.h файлов. Как в пректе показать что необходимо помимо обычных папок с *.h файлами смотреть еще и в C:\Program Files\Microsoft Platform SDK ? Спасибо.
Народ помогите пож-та, столкнулся тоже с проблемой, компилю в студии 2005, такой кусок: Код (Text): ..... hJobOne = CreateJobObject(NULL, NULL); JOBOBJECT_BASIC_LIMIT_INFORMATION myJobLI={0}; ZeroMemory(&myJobLI, sizeof(JOBOBJECT_BASIC_LIMIT_INFORMATION)); myJobLI.PriorityClass = IDLE_PRIORITY_CLASS; myJobLI.PerJobUserTimeLimit.QuadPart = 10000000; myJobLI.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS | JOB_OBJECT_LIMIT_JOB_TIME; SetInformationJobObject(hJobOne, JobObjectBasicLimitInformation, &myJobLI, sizeof(myJobLI)); ..... и мне выдает : error C3861: 'CreateJobObject': identifier not found error C3861: 'SetInforrnationJobObject': identifier not found точно так же и для структуры польз-го интерфейса: error C3861: 'SetInformationJobObject': identifier not found И при включении созданного процесса в задание error C3861: 'AssignProcessToJobObject': identifier not found В чем проблема? winnt.h подключать пробовал, ничего не изменилось
q_q Опечатался я), но все равно изменил и тоже самое, так и выскакивают: 1>.\name_1.cpp(277) : error C3861: 'CreateJobObject': identifier not found 1>.\name_1.cpp(296) : error C3861: 'SetInformationJobObject': identifier not found 1>.\name_1.cpp(309) : error C3861: 'SetInformationJobObject': identifier not found 1>.\name_1.cpp(342) : error C3861: 'AssignProcessToJobObject': identifier not found windows.h подключен
Benzin http://msdn2.microsoft.com/en-us/library/aa383745(VS.85).aspx Перед подключением windows.h определи Код (Text): #define _WIN32_WINNT 0x500