Если используешь Visual Studio, то там и читать нечего. Достаточно добавить в проект пустой ресурс файл (rc), затем открыть его двойным кликом в списке файлов проекта. После этого откроется редактор ресурсов. В нём можно создавать любой ресурс (в том числе меню) визуально и редактор сам позаботится о создании необходимых идентификаторов, которые поместит в файл resourses.h. Тебе будет достаточно заинклюдить этот файл в том месте, где потребуются идентификаторы и использовать их. Для загрузки меню из ресурсов используй API функцию LoadMenu." писал(а):П.С. Подскажыте плиз де в нете мона прочитать про создание меню с помощью файла ресурсов, а то с помощью WinAPI уже знаком а вот про способ с помощью файла ресурсов нечего незнаю.
Работа со списком в WinAPI.
Модераторы: Duncon, Hawk, Romeo, Eugie
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Пасиб. Буду разбератса. А с меню реально прочехлил...
Привет всем опять. Помогите пожалуйста решить проблемку. Дело в том, что необходимо измерить время работы некоторого цыкла в даном случае это сортировка масива пузырьковым методом.
Код
Первая проблема заключаетса в том, что с типом LARGE_INTEGER нельзя производить арифметические операции.
Вторая проблема заключаетса в том, что время работы полученое с помощью
clock() равняетса нулю, тобиш WorkTime1=0. Жирным шрифтом выделил все что связяно с подсчитыванием времени роботы.
Код
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define N 50
void main()
{
//Defining variables
int mas[N],i=0,k,j=0,x;
[B]LARGE_INTEGER LargInt1,LargInt2,WorkTime;
clock_t start,end;[/B]
double WorkTime1;
//Filling and showing unsorted array
printf("\nUnsorted mas[i]:\n");
while(i!=N)
{
k=rand();
if(k>0&&k<100)
{
mas[i]=k;
printf("%-5.2d",mas[i]);
i++;
}
}
//BubbleSort Method;Showing sorted array;Showing working time;
printf("\n\nBubbleSort Method:");
printf("\nSorted mas[i]:\n");
i=0;j=0;x=0;
[B]QueryPerformanceCounter(&LargInt1);
start=clock();[/B]
for(i=0;i<N;i++)
{
for(j=N-1;j>i;j--)
{
if (mas[j-1]>mas[j])
{
x=mas[j-1];
mas[j-1]=mas[j];
mas[j]=x;
}
}
}
[B]end=clock();[/B]
[B]QueryPerformanceCounter(&LargInt2);
WorkTime=LargInt2-LargInt1;
WorkTime1=(double)(end-start);[/B]
for(i=0;i<N;i++)
printf("%-5.2d",mas1[i]);
[B]printf("\nWorking Time is:%d",WorkTime);
printf("\nWorking Time is:%f",WorkTime1);[/B]
Вторая проблема заключаетса в том, что время работы полученое с помощью
clock() равняетса нулю, тобиш WorkTime1=0. Жирным шрифтом выделил все что связяно с подсчитыванием времени роботы.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
На будущее. Пожалуйста, заводи в подобном случае новую тему. Ведь твоя новая проблема никак не касается списков и WinApi.
Теперь по теме. Используй значение, возвращаемое QueryPerformanceFrequency для перевода HRT значений в секунды.
По поводу clock. Зачем используешь два разных подхода? Используй либо clock, либо HRT. Смешивать не надо.
Теперь по теме. Используй значение, возвращаемое QueryPerformanceFrequency для перевода HRT значений в секунды.
По поводу clock. Зачем используешь два разных подхода? Используй либо clock, либо HRT. Смешивать не надо.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Apokal, для такого короткого цикла (N=50) просто не хватит точности системного таймера, чтобы определить длительность. И QueryPerformanceCounter() не поможет, если в системе нет высокоточного таймера (на обычных компах нет) - она в этом случае внутри пользуется все тем же стандартным с частотой 18.2 Hz:
Насчет арифметических операций с данными типа LARGE_INTEGER: у них есть поле QuadPart, которое на современных компиляторах отображается в тип __int64, а с ним работают все операции, например:The high-resolution timer functions QueryPerformanceCounter and QueryPerformanceFrequency allow independent software vendors (ISVs) to use the high-resolution timers available on your target device.
These high-resolution timers enable more accurate timings than the one-millisecond granularity available through the GetTickCount function. For more information, see High-Performance Counter Support.
The OAL sample code provides default implementations of the performance querying functions.
If you do not provide high-resolution timers on your hardware platform, the default capabilities of the performance querying functions are implemented using GetTickCount.
In the default code, a call to QueryPerformanceCounter returns the value represented by GetTickCount, while QueryPerformanceFrequency returns 1000.
To support high-resolution timers
Provide your own implementations of the OEMQueryPerformanceCounter and OEMQueryPerformanceFrequency functions.
Add code to OEMInit to set the variables pQueryPerformanceCounter and pQueryPerformanceFrequency to point to your implementations of the OEMQueryPerformanceCounter and OEMQueryPerformanceFrequency functions.
Make any further calls to the QueryPerformance functions through their respective pointers.
Код: Выделить всё
__int64 ticks = LargInt2.QuadPart-LargInt1.QuadPart;
Пасиб за ответы все заработало, а тему я незаводил новую потомушо нехочу захломлять форум -- он и так забит. В коде я специально обьеденил два способа через clock() и QueryPerformanceCounter() чтобы не писать два кода которые лиш отличаютса парой строчек, ибо тогда у меня б пост большой вышел.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Ты не волнуйся о том, что форум бедет захламлен. Лучше подумай и читателях, которые будут в шоке листая многочисленные закладки одной темы, в которой обсуждается подряд несколько независимых вопросов и границу между этими вопросами определить достаточно сложно с первого взягляда. Захламление одной темы значительно хуже, чем захламление форума." писал(а):тему я незаводил новую потомушо нехочу захломлять форум
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.