Форум программистов, компьютерный форум CyberForum.ru

Не пойму как организовать алгоритм - C++

Восстановить пароль Регистрация
 
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
19.11.2011, 14:08     Не пойму как организовать алгоритм #1
Привет!... Не пойму как можно организовать алгоритм, имитирующий алгоритм планирования "Самый короткий процесс - следующий".
В принцепи вообще мало чего знаю о программировании на C++, но всё же сделать нужно...по этому надеюсь на Вас..

Нужно чтобы виртуальный процессор выполнял процессы, которые в нём забиты..вот примерный код процессора
C++
1
2
3
4
5
6
7
8
9
10
11
12
wail(true)
{
p = planning ()
 
for (int i = 0; i< 100; i++)
{
    p.count++;
    sleep(1);
    if(p.count>=p.length)
        break;
}
}
i - это колличество процессорного времени
count - счётчик комманд, которые успели выполниться
length - колличество команд в процессе
planning - сам алгоритм, который передаёт процесс на выполнение и его параметры
 Комментарий модератора 
Запрещено размещать тему в нескольких разделах одновременно (кросспостинг), а также дублировать тему в одном разделе.

 Комментарий модератора 
Чтобы "поднять" тему в разделе и поиске по форуму, используйте осмысленные сообщения, например "Тема/проблема/задача актуальна". Если вы чего-то достигли в решении проблемы на этот момент, сообщите об этом.


Добавлено через 12 часов 55 минут
вуывапро
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
19.11.2011, 16:51     Не пойму как организовать алгоритм #2
Цитата Сообщение от bupal Посмотреть сообщение
виртуальный процессор выполнял процессы, которые в нём забиты
потоки подойдут?

Добавлено через 1 минуту
копи паст создания процесса
C++
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
void main( VOID )
 
{
 
STARTUPINFO si;
 
PROCESS_INFORMATION pi;
 
ZeroMemory( &si, sizeof(si) );
 
si.cb = sizeof(si);
 
ZeroMemory( &pi, sizeof(pi) );
 
// Запустим дочерний процесс.
 
if( !CreateProcess( NULL, // Нет имени модуля (используется командная строка).
 
"MyChildProcess",     // Командная строка.
 
NULL,                 // Дескриптор процесса не наследуемый.
 
NULL,                 // Дескриптор потока не наследуемый.
 
FALSE,                // Установим наследование дескриптора в FALSE.
 
0,                    // Флажков создания нет.
 
NULL,                 // Используйте блок конфигурации родителя.
 
NULL,                 // Используйте стартовый каталог родителя.
 
&si,                  // Указатель на структуру STARTUPINFO.
 
&pi )                 // Указатель на структуру PROCESS_INFORMATION.
 
)
 
ErrorExit( "CreateProcess failed." );
 
// Ждать до тех пор, пока дочерний процесс не выйдет из работы.
 
WaitForSingleObject( pi.hProcess, INFINITE );
 
// Закроем дескрипторы процесса и потока.
 
CloseHandle( pi.hProcess );
 
CloseHandle( pi.hThread );
 
}
Добавлено через 1 минуту
C++
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
#include <windows.h>
#include <conio.h>
 
DWORD WINAPI ThreadFunc(LPVOID lpParam)
 
{
 
char szMsg[80];
 
wsprintf(szMsg, "Parameter = %d", *(DWORD*)lpParam);
 
MessageBox( NULL, szMsg, " ThreadFunc", MB_OK );
 
return 0;
 
}
 
VOID main( VOID )
 
{
 
DWORD dwThreadId, dwThrdParam = 1;
 
HANDLE hThread;
 
    char szMsg[80];
hThread = CreateThread(
 
NULL,         // атрибуты безопасности по умолчанию
 
0,            // размер стека используется по умолчанию
 
ThreadFunc,   // функция потока
 
&dwThrdParam, // аргумент функции потока
 
0,            // флажки создания используются по умолчанию
 
&dwThreadId); // возвращает идентификатор потока
 
// При успешном завершении проверяет возвращаемое значение.
 
if (hThread == NULL)
 
{
      wsprintf( szMsg, "CreateThread failed." ); 
      MessageBox( NULL, szMsg, "main", MB_OK );
   }
   else 
   {
      _getch();
      CloseHandle( hThread );
   }
}
вот поток
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
19.11.2011, 16:54  [ТС]     Не пойму как организовать алгоритм #3
К сожалению нужно чтобы было без потоков...((
есть возможность как то переделать ваш код?...чтобы получилось без потоков
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
19.11.2011, 17:05     Не пойму как организовать алгоритм #4
Цитата Сообщение от bupal Посмотреть сообщение
К сожалению нужно чтобы было без потоков...((
есть возможность как то переделать ваш код?...чтобы получилось без потоков
не бывает процесса без потоков я предлагаю вам юзать функцию
CreateProcess там в его создании просто отредактируйте структуру PROCESS_INFO
1создаёте поток
2в структуре PROCESS_INFO hthread указываете на только что созданный поток
должно прокатить
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
19.11.2011, 17:15  [ТС]     Не пойму как организовать алгоритм #5
Однако препод сказал, что нужно без потоков сделать...
я тут нашёл в сети вроде готовую прогу, но не могу понять, как она организована...можете помоч с разъяснениями?...
C++
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
void main()
 {
 int order[10],d=0,k=0,j=0,at[10],t=0,w=0,n=0,ct=0, st[10],ft[10],wt[10],ta[10], i=0,min,flag[10],clk=0;    
 float rt[10];
 cout<<"\n\nEnter No. of Process: ";
 cin>>n;
 cout<<"\nEnter Arrival time and Service Time.. \n";
 for(i=0;i<n;i++)
 {    
 cin>>at[i]>>st[i];
 flag[i]=0;
 ct+=st[i];
 }
 while(clk<ct)  //Creating a Lock to Arrest the Whole Loop. Here, only when Total Clock Time is equal to
                // Current clock time it will exit the loop.
 {
 min=100;       // Assiging a Dummy Value for only first check.
 for(i=0;i<n;i++)
 {
 if(st[i]<min&&flag[i]==0&&at[i]<=clk) // Finding a job which has minimum Service time (comparision)
 {                                     // and checking its Flag and Arrival Time with current Clock.
 min=st[i];
 j=i;                                  // If found we are assigning it.
 }
 }
 order[d]=j;    // Doing calculations....
 flag[j]=1;
 clk+=st[j];
 ft[j]=clk;
 ta[j]=ft[j]-at[j];
 wt[j]=ta[j]-st[j];
 rt[j]=(float)ta[j]/st[j];
 d++;
 }    
 cout<<"\nResults...\n"<<"Order\tAT\tST\tFT\tWT\tTA\tRatio\n";
 for(i=0;i<n;i++)
 {
 k = order[i];
 cout<<i+1<<"\t"<<at[k]<<"\t"<<st[k]<<"\t"<<ft[k]<<"\t"<<wt[k]<<"\t"<<ta[k]<<"\t"<<rt[k]<<"\n";
 }    
 for(i=0;i<n;i++)
 {
 t=ta[i]+t;
 w=wt[i]+w;
 }
 cout<<"\nAverage Turnaround Time is "<<(float)t/n<<" and Wait time is "<<(float)w/n<<"\n";
}
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
19.11.2011, 17:22     Не пойму как организовать алгоритм #6
Цитата Сообщение от bupal Посмотреть сообщение
я тут нашёл в сети вроде готовую прогу, но не могу понять, как она организована...можете помоч с разъяснениями?...
неимеет отношения к созданию потока вот код смотрите
C++
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
#include "windows.h"
DWORD WINAPI ThreadFunc(LPVOID lpParam)
 
{
 
char szMsg[80];
 
wsprintf(szMsg, "Parameter = %d", *(DWORD*)lpParam);
 
MessageBox( NULL, szMsg, " ThreadFunc", MB_OK );
Sleep(18000);
return 0;
 
}
 
 
int main(  )
 
{
 DWORD dwThreadId, dwThrdParam = 1;
 
HANDLE hThread;
 
hThread = CreateThread(
 
NULL,         // Г*òðèáóòû áåçîïГ*Г±Г*îñòè ГЇГ® óìîë÷Г*Г*ГЁГѕ
 
0,            // Г°Г*çìåð Г±ГІГҐГЄГ* èñïîëüçóåòñÿ ГЇГ® óìîë÷Г*Г*ГЁГѕ
 
ThreadFunc,   // ГґГіГ*êöèÿ ïîòîêГ*
 
&dwThrdParam, // Г*ðãóìåГ*ГІ ГґГіГ*êöèè ïîòîêГ*
 
0,            // ГґГ«Г*æêè ñîçäГ*Г*ГЁГї èñïîëüçóþòñÿ ГЇГ® óìîë÷Г*Г*ГЁГѕ
 
&dwThreadId); // âîçâðГ*Г№Г*ГҐГІ èäåГ*ГІГЁГґГЁГЄГ*òîð ïîòîêГ*
 
 
 
STARTUPINFO si;
 
PROCESS_INFORMATION pi;
pi.dwThreadId= dwThreadId;
pi.hThread=hThread;
ZeroMemory( &si, sizeof(si) );
 
si.cb = sizeof(si);
 
ZeroMemory( &pi, sizeof(pi) );
 
// Г‡Г*ГЇГіГ±ГІГЁГ¬ äî÷åðГ*ГЁГ© ïðîöåññ.
 
if( !CreateProcess( NULL, // ГЌГҐГІ èìåГ*ГЁ ìîäóëÿ (èñïîëüçóåòñÿ êîìГ*Г*Г¤Г*Г*Гї ñòðîêГ*).
 
"MyChildProcess",     // ÊîìГ*Г*Г¤Г*Г*Гї ñòðîêГ*.
 
NULL,                 // Äåñêðèïòîð ïðîöåññГ* Г*ГҐ Г*Г*ñëåäóåìûé.
 
NULL,                 // Äåñêðèïòîð ïîòîêГ* Г*ГҐ Г*Г*ñëåäóåìûé.
 
FALSE,                // ÓñòГ*Г*îâèì Г*Г*ñëåäîâГ*Г*ГЁГҐ äåñêðèïòîðГ* Гў FALSE.
 
0,                    // ÔëГ*æêîâ ñîçäГ*Г*ГЁГї Г*ГҐГІ.
 
NULL,                 // Èñïîëüçóéòå áëîê ГЄГ®Г*ГґГЁГЈГіГ°Г*öèè ðîäèòåëÿ.
 
NULL,                 // Èñïîëüçóéòå Г±ГІГ*ðòîâûé ГЄГ*ГІГ*ëîã ðîäèòåëÿ.
 
&si,                  // ÓêГ*Г§Г*òåëü Г*Г* ñòðóêòóðó STARTUPINFO.
 
&pi )                 // ÓêГ*Г§Г*òåëü Г*Г* ñòðóêòóðó PROCESS_INFORMATION.
 
)
 
 
 
// ÆäГ*ГІГј äî ГІГҐГµ ïîð, ïîêГ* äî÷åðГ*ГЁГ© ïðîöåññ Г*ГҐ âûéäåò ГЁГ§ Г°Г*áîòû.
 Sleep(10000);
WaitForSingleObject( pi.hProcess, INFINITE );
 
// Г‡Г*êðîåì äåñêðèïòîðû ïðîöåññГ* ГЁ ïîòîêГ*.
 
CloseHandle( pi.hProcess );
 
CloseHandle( pi.hThread );
 return 0;
}
Yandex
Объявления
19.11.2011, 17:22     Не пойму как организовать алгоритм
Ответ Создать тему
Опции темы

Текущее время: 02:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru