Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.47 MB
Время: 0.02 c
14-1133890435
Хинт
2005-12-06 20:33
2006.01.01
Выбор Delphi


14-1133768006
DDDeN
2005-12-05 10:33
2006.01.01
Создание справки формата CHM


1-1133495000
dust
2005-12-02 06:43
2006.01.01
как добавить вкладку в свойства папки


14-1133982665
Kerk
2005-12-07 22:11
2006.01.01
Я не люблю праздники. А вы?


2-1134742369
LORAN
2005-12-16 17:12
2006.01.01
деректива препроцессора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский