Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2010, 12:12   #1
session
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 14
По умолчанию установка приоритетов для потоков

1. Создать в системе все три потока.
2. Установить потоку MainThread приоритет «критический» для более устойчивой работы. Внимание! Будьте осторожны, когда выставляете потоку высокий приоритет – это может привести к существенному замедлению работы вашего компьютера вплоть до его зависания. Для предотвращения зависания рекомендуется в критический поток вставлять функции задержки (например, Sleep)
3. Запустить программу несколько раз, каждый раз выставляя определённый приоритет для потока Thread1 и Thread2.
4. Сделать выводы о влиянии приоритета потока на его работу.
мой код
Код:
#include<stdio.h>
#include<windows.h>
#include<iostream>
int Val1 = 0, Val2 = 0;
DWORD WINAPI MainThread (LPVOID p)
{
 //BOOL SetThreadPriority(HANDLE hThread, int nPriority);
	while (true)
	{
		Sleep(100);
		printf("%d\t%d\n",Val1,Val2);
	}
	return 0;
}


DWORD WINAPI Thread1 (LPVOID p)
{
	while (true)
	{
		Val1++;
	}
	return 0;
}

DWORD WINAPI Thread2 (LPVOID p)
{
	while (true)
	{	
		Val2++;
	}
	return 0;
}




int main()
{
   HANDLE mainThread, thread1, thread2;
   DWORD mainId, id1, id2;
  
   mainThread = CreateThread(0, 0, &MainThread, 0, 0, &mainId);//api
   if(!SetThreadPriority(mainThread, THREAD_PRIORITY_TIME_CRITICAL))
   {
       cout << "Setting critical priority failed\n";
       return 0;
   }
   thread1 = CreateThread(0, 0, &Thread1, 0, 0, &id1);
   thread2 = CreateThread(0, 0, &Thread2, 0, 0, &id2);

   return 0;
}
что-то не могу разобраться с этими приоритетамив каком месте программы задается приоритет?(у меня он вообще закомментирован). объяните что к чему пожалуйста. код не работает, 2 ошибки выдает

Последний раз редактировалось Stilet; 22.06.2010 в 12:26.
session вне форума Ответить с цитированием
Старый 22.06.2010, 12:19   #2
session
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 14
По умолчанию

еще один вариант есть
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<windows.h>
#include <cstdlib>
#include <iostream>

using namespace std;

int a[5];
int num;
int Val1 = 0, Val2 = 0;

DWORD WINAPI Thread1 (LPVOID p)
{
while (true)
{
Val1++;
}
return 0;
}

DWORD WINAPI Thread2 (LPVOID p)
{
while (true)
{
Val2++;
}
return 0;
}

DWORD WINAPI MainThread (LPVOID p)
{
while (true)
{
Sleep(100);
printf("%d\t%d\n",Val1,Val2);
}
return 0;
}
int main()
{
HANDLE mainThread, thread1, thread2;
DWORD mainId, id1, id2;
mainThread = CreateThread(0, 0, &MainThread, 0, 0, &mainId);
if(!SetThreadPriority(mainThread, THREAD_PRIORITY_TIME_CRITICAL))
{
cout << "Setting critical priority failed\n";
return 0;
}
thread1 = CreateThread(0, 0, &Thread1, 0, 0, &id1);
thread2 = CreateThread(0, 0, &Thread2, 0, 0, &id2);

//тут ставите условие завершения
//завершить поток можете функцией CloseHandle(mainThread);
// для остальных потоков аналогично
return 0;
}
[/CODE]
этот вроде ближе к правде. какую-то системную ошибку выдает поправьте пожалуйста

Последний раз редактировалось session; 22.06.2010 в 12:38.
session вне форума Ответить с цитированием
Старый 22.06.2010, 12:39   #3
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

deleted....

Последний раз редактировалось NiCola999; 22.06.2010 в 12:58.
NiCola999 вне форума Ответить с цитированием
Старый 22.06.2010, 12:45   #4
session
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 14
По умолчанию

сейчас поправлю, отпишу что получилось
session вне форума Ответить с цитированием
Старый 22.06.2010, 12:57   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

чушь я написал, вот немного поправил код, всё работает)) реально не знал что оно так

Код:
#include <iostream>
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<windows.h>

using namespace std;

int a[5];
int num;
int Val1 = 0, Val2 = 0;

DWORD WINAPI Thread1 (LPVOID p)
{	
    while(true){
	   Sleep(100);
		Val1++;
	}
}

DWORD WINAPI Thread2 (LPVOID p)
{	
    while(true){
	    Sleep(100);
		Val2++;
    }
}

DWORD WINAPI MainThread (LPVOID p)
{
    while(true){
		Sleep(100);
		printf("%d\t%d\n",Val1,Val2);
    }
}
int main()
{
   HANDLE mainThread, thread1, thread2;
   DWORD mainId, id1, id2;
   mainThread = CreateThread(0, 0, &MainThread, 0, 0, &mainId);
   if(!SetThreadPriority(mainThread, THREAD_PRIORITY_TIME_CRITICAL))
   {
       std::cout << "Setting critical priority failed\n";
       return 0;
   }
   thread1 = CreateThread(0, 0, &Thread1, 0, 0, &id1);
   thread2 = CreateThread(0, 0, &Thread2, 0, 0, &id2);

   //тут ставите условие завершения
   //завершить поток можете функцией CloseHandle(mainThread);
   // для остальных потоков аналогично   
   cin.get();
   return 0;
}

кстати поток не завершается той функцией, только что попробовал

Последний раз редактировалось NiCola999; 22.06.2010 в 13:04.
NiCola999 вне форума Ответить с цитированием
Старый 22.06.2010, 13:07   #6
session
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 14
По умолчанию

NiCola999, да нет. наверно с потоками все в порядке. они даны в условии
session вне форума Ответить с цитированием
Старый 22.06.2010, 13:19   #7
session
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 14
По умолчанию

спасибо вам!!! все работает!!!!круто!!!Я просто в восторге!!!!поясните как отблагодарить вас
session вне форума Ответить с цитированием
Старый 22.06.2010, 20:29   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

на весы нажать под ником, но мне это репутации недаст, так как у вас репутация меньше чем у меня. Денег можете прислать немного на кошелек снизу =))
NiCola999 вне форума Ответить с цитированием
Старый 23.06.2010, 10:17   #9
session
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 14
По умолчанию

спасибо, что хоть немноголадноя попробую.
вы правда молодеця на пятерку сегодня!!!
session вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
установка приоритетов для потоков session Общие вопросы C/C++ 2 21.06.2010 18:11
Ошибка в расстановке приоритетов (Bass.dll) Krendel' Мультимедиа в Delphi 4 23.04.2010 17:29
Не могу найти компоненты для архивации потоков TStream kir86975 Общие вопросы Delphi 5 31.03.2010 08:44
Глобальны переменные для потоков PM85 Общие вопросы C/C++ 3 15.04.2008 18:12
Дескрипторы потоков - Для каждого элемента списка необходимо создать поток, выполняющий требуемые функции kdv0403 Общие вопросы Delphi 2 09.06.2007 11:12