Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Результаты выполнения программы из командной строки и компилятора отличаются. Что делать? / 25 сообщений из 27, страница 1 из 2
29.08.2014, 14:29
    #38732776
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
Добрый день коллеги!

Помогите пожалуйста. Почему так себя ведет прогрммка из командной строки?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
int __cdecl main(int argc, char **argv)
{
	int y1[2];
	int t = 0;
	t = g("10.2.3.98", "Win32_PerfRawData_PerfOS_Processor", "PercentProcessorTime", "TimeStamp_Sys100NS");
	y1[0] = result2[0];
	y1[1] = result2[1];
	
	result2[0] = 0;
	result2[1] = 0;

	Sleep(1000);

	int y2[2];
	int t2 = 0;
	t2 = g("10.2.3.98", "Win32_PerfRawData_PerfOS_Processor", "PercentProcessorTime", "TimeStamp_Sys100NS");
	y2[0] = result2[0];
	y2[1] = result2[1];

	result2[0] = 0;
	result2[1] = 0;

	double percentUsingProcessor = 0;
	//percentUsingProcessor = 1 -((y2[0]-y1[0])/(y2[1]-y1[1]));
	//percentUsingProcessor =  (1 - ((y2[0] - y1[0]) / (y2[1] - y1[1]))) * 100;
	percentUsingProcessor =  ((double)1 - (((double)y2[0] - (double)y1[0]) / ((double)y2[1] - (double)y1[1]))) * (double)100;
	
	cout << y1[0] << endl;
	cout << y1[1] << endl;
	cout << y2[0] - y1[0] << endl;
	cout << y2[1] - y1[1] << endl;
	cout << ceil(percentUsingProcessor) << endl;

	cout << "==End==" << endl;

	y1[0] = 0;
	y1[1] = 0;
	y2[0] = 0;
	y2[1] = 0;

	Sleep(600000);

	return 0;
}

...
Рейтинг: 0 / 0
29.08.2014, 14:59
    #38732810
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
vadipokПочему так себя ведет прогрммка из командной строки?
Потому что в ней баг. Разве это не очевидно?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.08.2014, 15:05
    #38732817
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
Dimitry Sibiryakov,

Подскажи, плиз.
...
Рейтинг: 0 / 0
29.08.2014, 15:16
    #38732830
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
Dimitry SibiryakovvadipokПочему так себя ведет прогрммка из командной строки?
Потому что в ней баг. Разве это не очевидно?..


Дмитрий ну не томи. ))
Одну неделю только работаю с С++.
Сжалься... )
...
Рейтинг: 0 / 0
29.08.2014, 15:19
    #38732841
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
vadipokОдну неделю только работаю с С++.
Значит пришла пора включить вывод всех предупреждений компилятором и начать их читать. А,
возможно, даже начать изучать различные способы отладки программ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.08.2014, 15:39
    #38732858
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
vadipok,

Вы полный текст программы не привели.
Там вызывается функция g() а ее код отсутствует.
Более того, есть чтение из некой переменной result2 а самой переменной тоже нет.
Видимо это какая-то глобальная переменная, и вполне вероятно там какой мусор, который зависит от того из какой среды запускается программа.
...
Рейтинг: 0 / 0
02.09.2014, 08:27
    #38734531
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
Anatoly Moskovskyvadipok,

Вы полный текст программы не привели.
Там вызывается функция g() а ее код отсутствует.
Более того, есть чтение из некой переменной result2 а самой переменной тоже нет.
Видимо это какая-то глобальная переменная, и вполне вероятно там какой мусор, который зависит от того из какой среды запускается программа.

Добрый день! Вы абсолютно правы.
Как только обойти эту багу я пока не нашел.
Долго не отвечал, выходные получились длинные в деревне.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
#define _WIN32_DCOM
#define UNICODE
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")
# pragma comment(lib, "credui.lib")
# pragma comment(lib, "comsuppw.lib")
#include <wincred.h>
#include <strsafe.h>
#include <math.h>
#include <cmath>

int result2[2];

int g(char* ipAddress, char* tableName, char* parameterName, char* parameterName2)
{
	......................................... //текст программы

        VARIANT vtProp;

        // Get the value of the Name property
        hr = pclsObj->Get(L"PercentProcessorTime", 0, &vtProp, 0, 0);
		result2[0] = vtProp.intVal;
		VariantClear(&vtProp);

		// Get the value of the Name property
        hr = pclsObj->Get(L"TimeStamp_Sys100NS", 0, &vtProp, 0, 0);
		result2[1] = vtProp.intVal;
		VariantClear(&vtProp);

        pclsObj->Release();
        pclsObj = NULL;
    }

    // Cleanup
    // ========
    
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    if( pclsObj )
    {
        pclsObj->Release();
    }
    
    CoUninitialize();
	//wcout << " Result Value : " << result2[0] << endl;
	//wcout << " Result Value : " << result2[1] << endl;

    return 0;   // Program successfully completed.
}


int __cdecl main(int argc, char **argv)
{
	int y1[2];
	int t = 0;
	t = g("10.2.3.98", "Win32_PerfRawData_PerfOS_Processor", "PercentProcessorTime", "TimeStamp_Sys100NS");
	y1[0] = result2[0];
	y1[1] = result2[1];
	
	result2[0] = 0;
	result2[1] = 0;

	Sleep(1000);

	int y2[2];
	int t2 = 0;
	t2 = g("10.2.3.98", "Win32_PerfRawData_PerfOS_Processor", "PercentProcessorTime", "TimeStamp_Sys100NS");
	y2[0] = result2[0];
	y2[1] = result2[1];

	result2[0] = 0;
	result2[1] = 0;

	double percentUsingProcessor = 0;
	//percentUsingProcessor = 1 -((y2[0]-y1[0])/(y2[1]-y1[1]));
	//percentUsingProcessor =  (1 - ((y2[0] - y1[0]) / (y2[1] - y1[1]))) * 100;
	percentUsingProcessor =  ((double)1 - (((double)y2[0] - (double)y1[0]) / ((double)y2[1] - (double)y1[1]))) * (double)100;
	
	cout << y1[0] << endl;
	cout << y1[1] << endl;
	cout << y2[0] - y1[0] << endl;
	cout << y2[1] - y1[1] << endl;
	cout << ceil(percentUsingProcessor) << endl;

	cout << "==End==" << endl;

	y1[0] = 0;
	y1[1] = 0;
	y2[0] = 0;
	y2[1] = 0;

	Sleep(6000);

	return 0;
}
...
Рейтинг: 0 / 0
02.09.2014, 08:40
    #38734539
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
Я тут использую глобальный массив, чтобы функцию g() вызывать только один раз для улучшения производительности.
Или я не правильно делаю выводы и лучше сделать все стандартно с возвратом одного значения?
...
Рейтинг: 0 / 0
02.09.2014, 09:07
    #38734558
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
Вы отправили не всю программу.

Код: plaintext
1.
2.
3.
4.
 VARIANT vtProp;

        // Get the value of the Name property
       ==> hr = pclsObj->Get(L"PercentProcessorTime", 0, &vtProp, 0, 0);




Где тип данных hr ?(и не только её) Она тоже глобальная переменная? Отправьте уже весь код.
Что это вы. Изучаете неделю, а уже лезете в интерфейс ОС.
...
Рейтинг: 0 / 0
02.09.2014, 09:10
    #38734561
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
В g у вас происходит инициализация result2. Где тут выигрыш ваш ? Получается не к месту запутанный код. Если основная цель этой функции инициализация этого массива, то на мой взгляд, так не стоит делать.
...
Рейтинг: 0 / 0
02.09.2014, 09:26
    #38734580
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
SashaMercury Изучаете неделю, а уже лезете в интерфейс ОС.
А что делать?! )))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
#define _WIN32_DCOM
#define UNICODE
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")
# pragma comment(lib, "credui.lib")
# pragma comment(lib, "comsuppw.lib")
#include <wincred.h>
#include <strsafe.h>
#include <math.h>
#include <cmath>

int result2[2];

int g(char* ipAddress, char* tableName, char* parameterName, char* parameterName2)
{
	 HRESULT hres;

    // Step 1: --------------------------------------------------
    // Initialize COM. ------------------------------------------

	hres =  CoInitializeEx(0, COINIT_MULTITHREADED); 
    if (FAILED(hres))
    {
        cout << "Failed to initialize COM library. Error code = 0x" << hex << hres << endl;
        return 1;                  // Program has failed.
    }

    // Step 2: --------------------------------------------------
    // Set general COM security levels --------------------------

    hres =  CoInitializeSecurity(
        NULL, 
        -1,                          // COM authentication
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
        RPC_C_IMP_LEVEL_IDENTIFY,    // Default Impersonation  
        NULL,                        // Authentication info
        EOAC_NONE,                   // Additional capabilities 
        NULL                         // Reserved
        );

                      
    if (FAILED(hres))
    {
        cout << "Failed to initialize security. Error code = 0x" << hex << hres << endl;
        CoUninitialize();
        return 1;                    // Program has failed.
    }
    
    // Step 3: ---------------------------------------------------
    // Obtain the initial locator to WMI -------------------------

    IWbemLocator *pLoc = NULL;

    hres = CoCreateInstance(
        CLSID_WbemLocator,             
        0, 
        CLSCTX_INPROC_SERVER, 
        IID_IWbemLocator, (LPVOID *) &pLoc);
 
    if (FAILED(hres))
    {
        cout << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << endl;
        CoUninitialize();
        return 1;                 // Program has failed.
    }

    // Step 4: -----------------------------------------------------
    // Connect to WMI through the IWbemLocator::ConnectServer method

    IWbemServices *pSvc = NULL;

    // Get the user name and password for the remote computer
    CREDUI_INFO cui;
    bool useToken = false;
    bool useNTLM = true;
    wchar_t pszName[CREDUI_MAX_USERNAME_LENGTH+1] = {0};
    wchar_t pszPwd[CREDUI_MAX_PASSWORD_LENGTH+1] = {0};
    wchar_t pszDomain[CREDUI_MAX_USERNAME_LENGTH+1];
    wchar_t pszUserName[CREDUI_MAX_USERNAME_LENGTH+1];
    wchar_t pszAuthority[CREDUI_MAX_USERNAME_LENGTH+1];
    BOOL fSave;
    DWORD dwErr;

    memset(&cui,0,sizeof(CREDUI_INFO));
    cui.cbSize = sizeof(CREDUI_INFO);
    cui.hwndParent = NULL;
    // Ensure that MessageText and CaptionText identify
    // what credentials to use and which application requires them.
    //cui.pszMessageText = TEXT("Press cancel to use process token");
    //cui.pszCaptionText = TEXT("Enter Account Information");
    cui.hbmBanner = NULL;
    fSave = FALSE;

    //dwErr = CredUIPromptForCredentials( 
    //    &cui,                             // CREDUI_INFO structure
    //    TEXT(""),                         // Target for credentials
    //    NULL,                             // Reserved
    //    0,                                // Reason
    //    pszName,                          // User name
    //    CREDUI_MAX_USERNAME_LENGTH+1,     // Max number for user name
    //    pszPwd,                           // Password
    //    CREDUI_MAX_PASSWORD_LENGTH+1,     // Max number for password
    //    &fSave,                           // State of save check box
    //    CREDUI_FLAGS_GENERIC_CREDENTIALS |// flags
    //    CREDUI_FLAGS_ALWAYS_SHOW_UI |
    //    CREDUI_FLAGS_DO_NOT_PERSIST);  

    //if(dwErr == ERROR_CANCELLED)
    //{
    //    useToken = true;
    //}
    //else if (dwErr)
    //{
    //    cout << "Did not get credentials " << dwErr << endl;
    //    pLoc->Release();     
    //    CoUninitialize();
    //    return 1;      
    //}

    // change the computerName strings below to the full computer name
    // of the remote computer
    if(!useNTLM)
    {
        StringCchPrintf(pszAuthority, CREDUI_MAX_USERNAME_LENGTH+1, L"kERBEROS:%s", L"COMPUTERNAME");
    }

    // Connect to the remote root\cimv2 namespace
    // and obtain pointer pSvc to make IWbemServices calls.
    //---------------------------------------------------------

	char computerName[50];
	char* var1;
	char* var2;
	var1 = "\\\\";
	var2 = "\\root\\cimv2";
	sprintf(computerName, "%s%s%s", var1, ipAddress, var2);
   
    hres = pLoc->ConnectServer(
		_bstr_t(computerName),
        //_bstr_t(L"\\\\10.2.3.98\\root\\cimv2"),
        NULL,    // User name
		NULL,     // User password
		//_bstr_t(useToken?NULL:pszName),    // User name
        //_bstr_t(useToken?NULL:pszPwd),     // User password
        NULL,                              // Locale             
        NULL,                              // Security flags
        _bstr_t(useNTLM?NULL:pszAuthority),// Authority        
        NULL,                              // Context object 
        &pSvc                              // IWbemServices proxy
        );
    
    if (FAILED(hres))
    {
        cout << "Could not connect. Error code = 0x" << hex << hres << endl;
        pLoc->Release();     
        CoUninitialize();
        return 1;                // Program has failed.
    }

    //cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;


    // step 5: --------------------------------------------------
    // Create COAUTHIDENTITY that can be used for setting security on proxy

    /*COAUTHIDENTITY *userAcct =  NULL ;
    COAUTHIDENTITY authIdent;

    if( !useToken )
    {
        memset(&authIdent, 0, sizeof(COAUTHIDENTITY));
        authIdent.PasswordLength = wcslen (pszPwd);
        authIdent.Password = (USHORT*)pszPwd;

        LPWSTR slash = wcschr (pszName, L'\\');
        if( slash == NULL )
        {
            cout << "Could not create Auth identity. No domain specified\n" ;
            pSvc->Release();
            pLoc->Release();     
            CoUninitialize();
            return 1;               // Program has failed.
        }

        StringCchCopy(pszUserName, CREDUI_MAX_USERNAME_LENGTH+1, slash+1);
        authIdent.User = (USHORT*)pszUserName;
        authIdent.UserLength = wcslen(pszUserName);

        StringCchCopyN(pszDomain, CREDUI_MAX_USERNAME_LENGTH+1, pszName, slash - pszName);
        authIdent.Domain = (USHORT*)pszDomain;
        authIdent.DomainLength = slash - pszName;
        authIdent.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;

        userAcct = &authIdent;

    }
	*/
    // Step 6: --------------------------------------------------
    // Set security levels on a WMI connection ------------------

    hres = CoSetProxyBlanket(
       pSvc,                           // Indicates the proxy to set
       RPC_C_AUTHN_DEFAULT,            // RPC_C_AUTHN_xxx
       RPC_C_AUTHZ_DEFAULT,            // RPC_C_AUTHZ_xxx
       COLE_DEFAULT_PRINCIPAL,         // Server principal name 
       RPC_C_AUTHN_LEVEL_PKT_PRIVACY,  // RPC_C_AUTHN_LEVEL_xxx 
       RPC_C_IMP_LEVEL_IMPERSONATE,    // RPC_C_IMP_LEVEL_xxx
       NULL,                       // client identity
       EOAC_NONE                       // proxy capabilities 
    );

    if (FAILED(hres))
    {
        cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return 1;               // Program has failed.
    }

	// 1 result
    // Step 7: --------------------------------------------------
    // Use the IWbemServices pointer to make requests of WMI ----

    // For example, get the name of the operating system
	char selectValue[200];
	char* select1;
	char* select2;
	select1 = "Select * from ";
	select2 = " where Name = '_Total'";
	sprintf(selectValue, "%s%s%s", select1, tableName, select2);


    IEnumWbemClassObject* pEnumerator = NULL;
    hres = pSvc->ExecQuery(
        bstr_t("WQL"), 
		bstr_t(selectValue),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        &pEnumerator);
    
    if (FAILED(hres))
    {
        cout << "Query for operating system name failed." << " Error code = 0x" << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return 1;               // Program has failed.
    }

    // Step 8: -------------------------------------------------
    // Secure the enumerator proxy
    hres = CoSetProxyBlanket(
        pEnumerator,                    // Indicates the proxy to set
        RPC_C_AUTHN_DEFAULT,            // RPC_C_AUTHN_xxx
        RPC_C_AUTHZ_DEFAULT,            // RPC_C_AUTHZ_xxx
        COLE_DEFAULT_PRINCIPAL,         // Server principal name 
        RPC_C_AUTHN_LEVEL_PKT_PRIVACY,  // RPC_C_AUTHN_LEVEL_xxx 
        RPC_C_IMP_LEVEL_IMPERSONATE,    // RPC_C_IMP_LEVEL_xxx
        NULL,                       // client identity
        EOAC_NONE                       // proxy capabilities 
        );

    if (FAILED(hres))
    {
        cout << "Could not set proxy blanket on enumerator. Error code = 0x" << hex << hres << endl;
        pEnumerator->Release();
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return 1;               // Program has failed.
    }

    // When you have finished using the credentials,
    // erase them from memory.
    SecureZeroMemory(pszName, sizeof(pszName));
    SecureZeroMemory(pszPwd, sizeof(pszPwd));
    SecureZeroMemory(pszUserName, sizeof(pszUserName));
    SecureZeroMemory(pszDomain, sizeof(pszDomain));


    // Step 9: -------------------------------------------------
    // Get the data from the query in step 7 -------------------
 
    IWbemClassObject *pclsObj = NULL;
    ULONG uReturn = 0;

    while (pEnumerator)
    {
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);

        if(0 == uReturn)
        {
            break;
        }

        VARIANT vtProp;

        // Get the value of the Name property
        hr = pclsObj->Get(L"PercentProcessorTime", 0, &vtProp, 0, 0);
		result2[0] = vtProp.intVal;
		VariantClear(&vtProp);

		// Get the value of the Name property
        hr = pclsObj->Get(L"TimeStamp_Sys100NS", 0, &vtProp, 0, 0);
		result2[1] = vtProp.intVal;
		VariantClear(&vtProp);

        pclsObj->Release();
        pclsObj = NULL;
    }

    // Cleanup
    // ========
    
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    if( pclsObj )
    {
        pclsObj->Release();
    }
    
    CoUninitialize();
	wcout << " Result Value : " << result2[0] << endl;
	wcout << " Result Value : " << result2[1] << endl;

    return 0;   // Program successfully completed.
}


int __cdecl main(int argc, char **argv)
{
	int y1[2];
	int t = 0;
	t = g("10.2.3.98", "Win32_PerfRawData_PerfOS_Processor", "PercentProcessorTime", "TimeStamp_Sys100NS");
	y1[0] = result2[0];
	y1[1] = result2[1];
	
	result2[0] = 0;
	result2[1] = 0;

	Sleep(1000);

	int y2[2];
	int t2 = 0;
	t2 = g("10.2.3.98", "Win32_PerfRawData_PerfOS_Processor", "PercentProcessorTime", "TimeStamp_Sys100NS");
	y2[0] = result2[0];
	y2[1] = result2[1];

	result2[0] = 0;
	result2[1] = 0;

	double percentUsingProcessor = 0;
	//percentUsingProcessor = 1 -((y2[0]-y1[0])/(y2[1]-y1[1]));
	//percentUsingProcessor =  (1 - ((y2[0] - y1[0]) / (y2[1] - y1[1]))) * 100;
	percentUsingProcessor =  ((double)1 - (((double)y2[0] - (double)y1[0]) / ((double)y2[1] - (double)y1[1]))) * (double)100;
	
	cout << y1[0] << endl;
	cout << y1[1] << endl;
	cout << y2[0] << endl;
	cout << y2[1] << endl;
	cout << ceil(percentUsingProcessor) << endl;

	cout << "==End==" << endl;

	y1[0] = 0;
	y1[1] = 0;
	y2[0] = 0;
	y2[1] = 0;

	Sleep(6000);

	return 0;
}

...
Рейтинг: 0 / 0
02.09.2014, 11:56
    #38734750
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
vadipokА что делать?! )))
Как я уже сказал, учиться отлаживать программы:
а) в отладчике;
б) ведением отладочного лога с записью нужной информации в ключевых точках.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.09.2014, 13:10
    #38734847
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
Dimitry Sibiryakov,

Да пробовал я, передача данных от функции g происходит нормально.
Проблемы в расчетах процента.
...
Рейтинг: 0 / 0
02.09.2014, 14:24
    #38734955
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
То есть вы считаете что расчет процента происходит по разному ? Вы точно так думаете ?

А что значит int __cdecl main ? Может попробовать классическую точку входа ?)
...
Рейтинг: 0 / 0
02.09.2014, 14:26
    #38734959
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
SashaMercuryТо есть вы считаете что расчет процента происходит по разному ? Вы точно так думаете ?

А что значит int __cdecl main ? Может попробовать классическую точку входа ?)

Это она самая и есть, что ни на есть классическая.

__cdecl -- означает использование ABI от языка С ( как в языке С ).
...
Рейтинг: 0 / 0
02.09.2014, 14:31
    #38734969
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
MasterZiv, спасибо.
Отличается ли int main от int __cdecl main ?
...
Рейтинг: 0 / 0
02.09.2014, 14:38
    #38734980
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
SashaMercuryMasterZiv, спасибо.
Отличается ли int main от int __cdecl main ?

Грубо -- нет.

На самом деле, зависит от параметров компиляции,

main -- функция с соглашениями о вызовах по умолчанию (указанном при компиляции или заданном в компиляторе по умолчанию)

__cdecl main -- функция с соглашением о вызовах, заданным явно.

Обычно это одно и то же, поскольку для С-шных программ обычно соглашение по умолчанию задаётся как cdecl.

Но тут ещё есть один нюанс -- это не совсем функция, это точка входа в программу (консольную), её компилятор может чутьчуть по-особому обрабатывать.
...
Рейтинг: 0 / 0
02.09.2014, 14:49
    #38734998
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
MasterZiv,

вот тут есть четкий пример от microsoft на языке VB:
http://msdn.microsoft.com/en-us/library/aa392397(v=vs.85).aspx

но у меня почему то не получается по аналогии, поэтому я и подумал что во время расчета процентов происходит касяк.
...
Рейтинг: 0 / 0
02.09.2014, 15:07
    #38735030
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
MasterZiv, спасибо за пояснения :)

То есть проценты у вас при компиляции считаются нормально, а при запуске из командной строки exe файла по разному ? Мне кажется это маловероятно. Этот код скучный. Даже я его шерстить не хочу. Локализуйте где находится ошибка самостоятельно, а потом спрашивайте. Мне кажется, что в таком случае, вероятность того что вам тут помогут, в разы выше. Точнее, я думаю, что в таком случае вам обязательно помогут.
...
Рейтинг: 0 / 0
02.09.2014, 15:12
    #38735039
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
понятно, спасибо
...
Рейтинг: 0 / 0
02.09.2014, 15:14
    #38735042
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
vadipokпонятно, спасибо

Я например так и не понял, в чём же проблема...
...
Рейтинг: 0 / 0
02.09.2014, 15:14
    #38735044
locked
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
MasterZivэто не совсем функция, это точка входа в программу (консольную), её компилятор может чутьчуть по-особому обрабатывать.
Не совсем так. Это самая обыкновенная функция. "Точка входа", или инициализирующий код, прикомпоновывается из библиотеки.
...
Рейтинг: 0 / 0
02.09.2014, 15:17
    #38735053
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
vadipokпоэтому я и подумал что во время расчета процентов происходит касяк.

А зачем ты вообще думал? Всё, что тебе нужно было сделать это вывести на экран или в файл
исходные данные для этого расчёта, а потом проверить если его результат совпадает с тем,
что ты посчитал на калькуляторе или столбиком на листке бумаги исходя из этих данных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.09.2014, 15:45
    #38735105
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
vadipok, а можно ещё один простой, и очевидный для многих(вероятно) вопрос. Для чего предназначена эта программа(и её дальнейшее развитие) ?

меня гонят. Всем до свидание.
...
Рейтинг: 0 / 0
02.09.2014, 15:51
    #38735113
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Результаты выполнения программы из командной строки и компилятора отличаются. Что делать?
SashaMercuryvadipok, а можно ещё один простой, и очевидный для многих(вероятно) вопрос. Для чего предназначена эта программа(и её дальнейшее развитие) ?

меня гонят. Всем до свидание.

Здесь спорили надо это или не надо.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Результаты выполнения программы из командной строки и компилятора отличаются. Что делать? / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]