Подсчет контрольной суммы файла
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Подсчет контрольной суммы файла (суммы байт по модулю 256). Нить считывает участок файла и считает его сумму. Результаты складываются.
ребят, напишите весь код пожалуйста. в проге не шарю вообще
ребят, напишите весь код пожалуйста. в проге не шарю вообще
как нить создать?
QThread/std::thread/CreateThread/... ?
QThread/std::thread/CreateThread/... ?
Приглашаю на свой блог о программировании: pro-prof.com
блин я это не знаю вообще( препод говорил создать 2 потока. 1 поток считает одну половину, второй поток считает вторую половину, в конце они складываются
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
То есть нужна не помощь, а готовое решение? Перенести тему в "Решите мне задачку?". Мне не сложно, но учти, там народ денежку захочет. А здесь мы просто так поможем. Правда, в этом случае, желание разобраться самому во всём происходящем с твоей стороны обязательно.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
лучше помогите тогда просто. как писать, какой алгоритм, все что сможете рассказать по поводу решения
а смысл переносить? - ТС не знает чего от него препод требует, на мой вопрос от не ответил, как я смогу ему помочь (да даже если за денюжку) ?То есть нужна не помощь, а готовое решение? Перенести тему в "Решите мне задачку?". Мне не сложно, но учти, там народ денежку захочет. А здесь мы просто так поможем. Правда, в этом случае, желание разобраться самому во всём происходящем с твоей стороны обязательно.
Приглашаю на свой блог о программировании: pro-prof.com
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
В этом согласен.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Код: Выделить всё
#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;
}
вот в этом мьютекс и нить вроде, скажите какой алгоритм и как считать вообще?
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Во-первых, как работать с тредами мы бы и так подсказали, достаточно было сказать, под что пишешь. Во-вторых, я очень сомневаюсь, что тебе нужно под UNIX писать, очень смахивает на то, что взял откуда-то левый кусок кода и закопипастил сюда.
Ты пойми, для того, чтобы тебе помочь, нам нужно ТЗ (техническое задание). То, что ты написал, на ТЗ не тянет совсем:
Всё это в любом случае должно быть оговорено, иначе не понятно как составлять тот самый алгоритм, который ты от нас хочешь получить.
Пойми, мы не телепаты и выйти на дистанционный контакт с твоим преподавателем не можем. Ты должен это сделать сам. Как только у тебя будет чёткое задание, мы сможем оказать чёткую помощь.
Ты пойми, для того, чтобы тебе помочь, нам нужно ТЗ (техническое задание). То, что ты написал, на ТЗ не тянет совсем:
Слишком мало подробностей. Сколько должно быть тредов? Какой именно участок файла читать? И т.д.Winston писал(а): Подсчет контрольной суммы файла (суммы байт по модулю 256). Нить считывает участок файла и считает его сумму. Результаты складываются.
Всё это в любом случае должно быть оговорено, иначе не понятно как составлять тот самый алгоритм, который ты от нас хочешь получить.
Пойми, мы не телепаты и выйти на дистанционный контакт с твоим преподавателем не можем. Ты должен это сделать сам. Как только у тебя будет чёткое задание, мы сможем оказать чёткую помощь.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.