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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 19.06.2010, 11:30   #1
session
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 14
По умолчанию установка приоритетов для потоков

1. Создать в системе все три потока.
2. Установить потоку MainThread приоритет «критический» для более устойчивой работы.
начало есть. прописаны функции потоков. осталось только установить приоритет и функция main пустая.

Код:
#include<stdio.h>
#include<conio.h>
#include<process.h>
int a[5];
int num;
int Val1 = 0, Val2 = 0;
void Thread1( void* pParams )
{
	int i;
	while ( true )
	{
		for (i = 0; i < 5; i++ ) 
		{
			a[i] = num;
			
		}
		num++;
	}
}

void Thread2( void* pParams )
{
	num = 0;
	while( TRUE )
	{
		printf( "%d %d %d %d %d\n",a[ 0 ], a[ 1 ], 
			a[ 2 ], a[ 3 ], a[ 4 ] );
	}
}
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;
}

void main()
{
	getch();
}
вот теор.сведения
функции потоков создавать с помощью функции API:

HANDLE CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId);

lpThreadAttributes – атрибуты защиты(для большинства целей хватает значения 0);
dwStackSize – размер стека для нового потока(как и в предыдущем случае хватает 0);
lpStartAddress – адрес функции которая станет новым потоком.
Остальные 3 параметра пока оставим в покое и передаём им 0:

DWORD tId;
CreateThread(0, 0, fnct_name, 0, 0, &tId);

Здесь tId – целочисленная переменная, в которую функция записывает идентификационный номер потока. В качестве параметра lpStartAddress уже необходимо передавать немного отличающуюся от предыдущей работы функцию:

DWORD WINAPI fnct_name (LPVOID p)
{
// Код функции потока

return 0;
}

Каждому потоку можно установить свой собственный приоритет. В зависимости от приоритета операционная система выделяет потоку процессорное время. Ниже приведены различные приоритеты, которые могут быть установлены для потока (приоритеты расставлены в порядке возрастания важности):

THREAD_PRIORITY_IDLE – фоновый
THREAD_PRIORITY_LOWEST – низкий
THREAD_PRIORITY_BELOW_NORMAL – ниже среднего
THREAD_PRIORITY_NORMAL – средний
THREAD_PRIORITY_ABOVE_NORMAL – выше среднего
THREAD_PRIORITY_HIGHEST – высокий
THREAD_PRIORITY_TIME_CRITICAL – критический (реального времени)

Для установки потоку нужного приоритета используется функция:

BOOL SetThreadPriority(HANDLE hThread, int nPriority);

Здесь hThread – контекст потока, возвращаемый функцией.
надеюсь, это поможет

Последний раз редактировалось Carbon; 20.06.2010 в 10:01.
session вне форума
Старый 21.06.2010, 17:17   #2
session
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 14
По умолчанию

ребятки, я не так часто обращаюсь за помощью...всегда пишу сама. ну помогите с этой задачей. кто знает как она решается
session вне форума
Старый 21.06.2010, 18:11   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Ну так у вас есть все сведения для написания кода.
Код:
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);
   // для остальных потоков аналогично
   return 0;
}
Только я вот не понимаю, зачем вам функции
Код:
void Thread1( void* pParams )
{
	int i;
	while ( true )
	{
		for (i = 0; i < 5; i++ ) 
		{
			a[i] = num;
			
		}
		num++;
	}
}

void Thread2( void* pParams )
{
	num = 0;
	while( TRUE )
	{
		printf( "%d %d %d %d %d\n",a[ 0 ], a[ 1 ], 
			a[ 2 ], a[ 3 ], a[ 4 ] );
	}
}
Лучше уберите их. Правильнее через DWORD WINAPI писать.
MaTBeu вне форума
Закрытая тема


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



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