Форум: "WinAPI";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
Внизпроцессы и потоки... Найти похожие ветки
← →
JJohn © (2005-10-19 23:35) [0]Ребята... Есть такая проблемка...
На тему процессов и потоков (ф-ции CreateProcess , CreateThread, и т.д.)
Конкретней - написать программку, в консоле, которая выводит сортировку массива случай. чисел с отображением хода (програсса) в процентах, и чтобы можно было отменить слишком долгую операцию...
Есть конечно еще пару вопросов, но пока меня это интересует...
"Собрал" стандартный пузырьковой алгоритм сортировки... Разобрал ф-ции CreateProcess и CreateThread(вроде понятны все параметры и т..д.), только вот никак не пойму, как все это использовать в конкретной задаче? Посоветуйте хотя бы, с чего начать?
← →
MBo © (2005-10-20 07:05) [1]В папке Delphi\Demos\Threads есть именно такой пример. Не консоль, но к сути задачи это отношения не имеет.
← →
Ботвин Дмитрий (2005-10-20 09:12) [2]JJohn © (19.10.05 23:35)
Если тебе нужен прогрэссор хода работы, то выбор "пузырькового" алгоритма
не верен. Он не позволяет оценить на промежуточных шагах алгоритма, насколько близка текущая последовательность к требуемому результату.
В твоём случае надо использовать алгоритм замены. Он более быстрый и в при этом максимальное число перестановок элементов не превышает n-1,
где n -длина массива.
← →
JJohn © (2005-10-28 22:38) [3]итак, что нужно точно сделать, стало более менее ясно... а то раньше и сам не совсем понимал, что мне нужно именно........
1) что нужно сделать первым, так это создать exe`шник, являющейся консольной программой.
этот модуль должен производить сортировку большого массива(пользуемся "пузырьком", так как самый медленный способ). Массив выделяться должен динамически(для того чтобы в командной строке можно было передавать его размер)
еще указано, что в режиме "по умолчанию" - производится вывод на экран, то есть режим пользователя, а в режиме "silent mode" не производится вывод на экран.
Это обязательное условие того, что нужно сделать...
Вот что удалось понять......
Здесь должен создаваться поток(CreateThread), который и будет выполнять сортировку..,
а в интерфейсной части что-то типа этого://interface
while(1) {
...
res=WaitForSingleObject(hSort,0);
...
if (res==WAIT_OBJECT_0)
{
...//exit Program
}
} //while
Так вот я не пойму, как именно правильно организовать поток с функцией сортировки.
и еще не совсем понятно, как можно с помощью выше приведенного куска кода организовать то, чтобы можно было прервать нажатием клавиши например, длительную операцию(если допустим мы ввели слишком большой размер массива)
Сама сортировка производится, но без потока.....:
Нечто типа:for n:=0 to 999 do
for i:=0 to 999 do
if Massiv[i]>Massiv[i+1] then begin
buf:=Massiv[i+1];
Massiv[i+1]:=Massiv[i];
Massiv[i]:=buf;
end;
программе в консоле передается параметр размера. Это создано специально для организации второго консолного exe`шника, который будет использовать первый, и с помощью которого мы будем измерять время сортировки в зависимости от размера массива....но пока мне нужно понять как сделать первый модуль...
← →
JJohn © (2005-10-29 23:32) [4]никто не может помочь?
← →
JJohn © (2005-10-29 23:32) [5]никто не может помочь?
← →
Virgo_Style © (2005-10-29 23:51) [6]Сортировка в потоке - это цель или средство? Я это к тому, что она тут imho совершенно ни к чему.
Если все же в потоке, то следующий вопрос - реализация д.б. WinAPI или все же подойдет дельфийский TThread.
Что касается динамического массива -
var M: array of integer;
SetLength(M,20);
SetLength(M, Length(M)+1);
for i:=Low(M) to High(M) do
M[i]:=0;
- в таком ключе.
← →
JJohn © (2005-10-30 01:29) [7]Virgo_Style,
да-да... реализация потока должна быть обязательно апишная...
а на счет средство и цели не понял
← →
JJohn © (2005-10-30 01:32) [8]1-й модуль - программа bsort.exe
Консольная программа, производящая сортировку большого массива случайных чисел (4 байта) с отображением прогресса в % и возможностью отмены длительной операции. Работа с потоками - функции API. Массив выделяется динамически, его размер передается программе в командной строке. Режим работы "по умолчанию" - с выводом на экран, а по указанию - "silent mode", без вывода на экран.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c