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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2011, 20:53   #1
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию Поиск простых чисел + поток (C++)

Добрый вечер уважаемые форумчане. Задали вот такую задачу:

С помощью функции CreateThread создать нить и выполнить в ней ряд действий. В программе должны быть предусмотрена возможность приостановить, возобновить и прекратить выпоняемые действия. Нить должна передавать главному процессу свой статус, к примеру, текущие действия или процент выполнения (статус можно передавать, например, изменением приватных полей формы и использовать значения этих полей используется для отображения по таймеру). Выход из нити осуществлять с помощью функции ExitThread. При решении задачи желательно использование WinAPI-функций.

Поиск простых чисел. Поток ищет простые числа (начиная с заданного), главный процесс следит за прогрессом и выдает текущие значения.

Собрав по кусочкам пример из Интернета, пример преподавателя и свой код, вот что у меня получилось:

Код:
#include <iostream>
#include <windows.h> 
using namespace std;

long WINAPI MainThread(long lParam);

int main()
{
	HANDLE hThread[1];
	DWORD dwID[1];
	DWORD dwRetVal = 0;

	hThread[0] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MainThread,NULL,0,&dwID[0]);
	dwRetVal = WaitForMultipleObjects(1, hThread, TRUE, INFINITE);
	CloseHandle(hThread[0]);

	return 0;
}

long WINAPI MainThread(long lParam)
{
	long number;
	cout << "Number - ";
	cin >> number;

	long i;
	for(i = 2; i<=(number - 1); i++)
	{
		if ((number % i)==0)
		{
		    cout << number << " is not prime!" << endl;
		    return 0;
		}
	}
	cout << endl << number << " is prime" << endl;
	return 0;
}
Скажите, насколько правильно то, что я тут наваял и как осуществить возможность приостановить, возобновить и прекратить выпоняемые действия, и вывести процент выполнения?
Brabus вне форума Ответить с цитированием
Старый 13.09.2011, 10:28   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Поток ищет простые числа

ваш же поток проверяет, является ли одно! введённое число простым или нет
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 13.09.2011, 14:22   #3
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

veniside, а кроме этого правильно?
Brabus вне форума Ответить с цитированием
Старый 29.09.2011, 23:55   #4
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

Всем добрый вечер. Хотелось бы вернуться к этой задаче, так как без Вашей помощи я вряд ли справлюсь. Я взял другой алгоритм перебора(быстрее) и попытался сдать эту задачу, но преподаватель сказал что она не многопоточная, а что здесь сначала работает главный поток, потом поток перебора, потом снова главный поток. То есть фактически она всё-равно однопоточная. Собственно вопрос: как сделать так чтобы оба потока работали вместе?

Код:
#include <iostream>
#include <windows.h> 
using namespace std;

long WINAPI MainThread(long lParam);

int main()
{
	HANDLE hThread[1];
	DWORD dwID[1];
	DWORD dwRetVal = 0;

	hThread[0] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MainThread,NULL,0,&dwID[0]);
	dwRetVal = WaitForMultipleObjects(1, hThread, TRUE, INFINITE);
	CloseHandle(hThread[0]);

	return 0;
}

long WINAPI MainThread(long lParam)
{
	int i,j;
	for (i=3; i<300000; i+=2)
	{
		bool flag=true;
		j=2;
		while (j<=sqrt((double)i))
		{
			if (i%j==0)
			{
				flag=false;
				break;
			}
			j++;
		}
		if (flag==true) 
			printf("%d\n",i);
	}
	getchar();
	return 0;
}
Brabus вне форума Ответить с цитированием
Старый 30.09.2011, 08:46   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

работа с потоками может вот такой читаем тему
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для поиска простых, простых парных и взаимнопростых чисел in da fly Помощь студентам 1 26.05.2011 23:30
выбор из ряда чисел простых чисел изо Паскаль, Turbo Pascal, PascalABC.NET 5 13.04.2011 22:51
Вычисление простых чисел HuKuTa74 Помощь студентам 7 07.12.2010 09:36
Поиск простых чисел из диапазона dex92 Помощь студентам 2 21.05.2010 09:40
поиск простых чисел методом решета.программа на С или С++ из_семи Помощь студентам 2 25.02.2009 20:56