Подсчет контрольной суммы файла

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Winston
Сообщения: 14
Зарегистрирован: 28 май 2013, 21:32

Подсчет контрольной суммы файла (суммы байт по модулю 256). Нить считывает участок файла и считает его сумму. Результаты складываются.


ребят, напишите весь код пожалуйста. в проге не шарю вообще
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

как нить создать?
QThread/std::thread/CreateThread/... ?
Приглашаю на свой блог о программировании: pro-prof.com
Winston
Сообщения: 14
Зарегистрирован: 28 май 2013, 21:32

блин я это не знаю вообще( препод говорил создать 2 потока. 1 поток считает одну половину, второй поток считает вторую половину, в конце они складываются
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

То есть нужна не помощь, а готовое решение? Перенести тему в "Решите мне задачку?". Мне не сложно, но учти, там народ денежку захочет. А здесь мы просто так поможем. Правда, в этом случае, желание разобраться самому во всём происходящем с твоей стороны обязательно.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Winston
Сообщения: 14
Зарегистрирован: 28 май 2013, 21:32

лучше помогите тогда просто. как писать, какой алгоритм, все что сможете рассказать по поводу решения
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

То есть нужна не помощь, а готовое решение? Перенести тему в "Решите мне задачку?". Мне не сложно, но учти, там народ денежку захочет. А здесь мы просто так поможем. Правда, в этом случае, желание разобраться самому во всём происходящем с твоей стороны обязательно.
а смысл переносить? - ТС не знает чего от него препод требует, на мой вопрос от не ответил, как я смогу ему помочь (да даже если за денюжку) ?
Приглашаю на свой блог о программировании: pro-prof.com
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

В этом согласен.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Winston
Сообщения: 14
Зарегистрирован: 28 май 2013, 21:32

Код: Выделить всё

#include <stdio.h> 
#include <stdlib.h>
#include <unistd.h> //системные вызовы системы линукс, функции низкого уровня
#include <pthread.h> //для работы с потоками
#include <sys/times.h> //функции для работы со временем
void* run(void *arg); //определим функцию ран - у каждого потока есть начальная функция
static pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; //статик - внутреняя переменная модуля, присваиваем мьютексу начальное значение, вначале он разблокирован
int main(void){
	pthread_t thread1, thread2; //создаем два потока
	int num1=1, num2=2; int res; //одна и та же функция для двух потоков, ей передается указатель, одному потоку передадим нум 1, другому - нум2
	srand(times(NULL)); //генератор случайных чисел, сранд устанавливает в качестве начального значения для генератора случайных чисел
	res=pthread_create(&thread1,NULL,&run,&num1); //переменные поределяются внутри функции=> это си++	(адрес переменной потока,атрибуты, стартовая функция,первый поток получит в качестве параметра нум 1 следовательно он будет знать, что он первый поток)

	if(res!=0){
		perror("Can't create thread1");
		exit(1);
	}
//теперь у нас два потока - основной и тот который мы запустили, ран и оснвной поток выполняются асинхронно(не можем сказать когда что) значит теперь нужен мьютекс, он защищает экран, чтобы потовыводил целыми строкми а не сначала то что первый хочет потом вдруг то что свторой
	pthread_mutex_lock(&mutex); //залокироваи => только мы имеем право выводить
	printf("Thread1 is created.\n");
	pthread_mutex_unlock(&mutex);
//создаем второй поток

	res=pthread_create(&thread2,NULL,&run,&num2); //инт не надо, переменая рес уже создана
	if(res!=0){
		perror("Can't create thread2");
		exit(2);
	}

	pthread_mutex_lock(&mutex);
	printf("Thread2 is created.\n");
	pthread_mutex_unlock(&mutex);

	//create- разделяет поток на два, join - объединяет, когда ресурсы, связанные с потоком освободились, для второго потока создается стек, пока мы не объединим, стек будет висть

	pthread_join(thread1,NULL); //второе значение - куда будет сохранен результат, функция дожидается, пока поток завершит работу
	pthread_join(thread2,NULL);
	pthread_mutex_destroy(&mutex); //если ктото на этом мьютексе еще висит - будет освобожден
	return 0;
}
void *run(void *arg){ //каждому потоку передаем аргумент, надо его считать
	
	}
	return NULL;
}
Winston
Сообщения: 14
Зарегистрирован: 28 май 2013, 21:32

вот в этом мьютекс и нить вроде, скажите какой алгоритм и как считать вообще?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Во-первых, как работать с тредами мы бы и так подсказали, достаточно было сказать, под что пишешь. Во-вторых, я очень сомневаюсь, что тебе нужно под UNIX писать, очень смахивает на то, что взял откуда-то левый кусок кода и закопипастил сюда.

Ты пойми, для того, чтобы тебе помочь, нам нужно ТЗ (техническое задание). То, что ты написал, на ТЗ не тянет совсем:
Winston писал(а): Подсчет контрольной суммы файла (суммы байт по модулю 256). Нить считывает участок файла и считает его сумму. Результаты складываются.
Слишком мало подробностей. Сколько должно быть тредов? Какой именно участок файла читать? И т.д.

Всё это в любом случае должно быть оговорено, иначе не понятно как составлять тот самый алгоритм, который ты от нас хочешь получить.

Пойми, мы не телепаты и выйти на дистанционный контакт с твоим преподавателем не можем. Ты должен это сделать сам. Как только у тебя будет чёткое задание, мы сможем оказать чёткую помощь.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить