Pthreads vlakno – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pthreads vlakno – C / C++ – Fórum – Programujte.comPthreads vlakno – C / C++ – Fórum – Programujte.com

 

Ezechiel0
Newbie
18. 3. 2012   #1
-
0
-

Ahoj,

chcel by som v jednom vlakne generovat slova a v druhom, aby raz za cas zapisalo do logu (bud v nejakom intervale napr 10s, alebo ked bude moct), neviem si dat rady uz, program mi vygeneruje par slov a zapise do logu a skonci. Chcel by som aby dosiel na koniec a vygeneroval vsetky slova. Samostatne generovat slova mi ide. 

Vopred Dakujem za rady a pripomienky, niektore detaily v programe mi prepacte, este tam bude viac zmien.


#include <iostream>
#include <fstream>
#include <sstream>
#include <math.h>
#include <time.h>
#include <pthread.h>
#include <stdlib.h>
#include <semaphore.h>

using namespace std;

unsigned long word_counter = 0; //pocitadlo vygenerovanych hesiel
char allowed_characters[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};  //znaky pre generovanie hesla
int max_password_lenght = 6;
int size_of_allowed_characters = sizeof(allowed_characters) / sizeof(char);

sem_t mutex;

unsigned long all_possible_passwords_count(){
	unsigned long total_passwords = 0;
	int password_size = max_password_lenght;
	for (int i = password_size; i > 0; i--){
		total_passwords += pow(size_of_allowed_characters, password_size);
		password_size--;
	}
	return total_passwords;
}

void * trace_to_file(void *txt){
	//sem_wait(&mutex);       /* down semaphore */
	ofstream trace;
	trace.open("trace_log.txt", ios::out);

	unsigned long total = all_possible_passwords_count();
	trace << "Total: " << total << endl;
	trace << "Used: " << word_counter << endl;
	trace << "To end: " << total - word_counter << endl;
	trace << "--------------------------------------------" << endl;

	trace.close();
	//sem_post(&mutex);       /* up semaphore */
}

void printout(string text){
	cout << text << endl;
}

void generate_next_word (string word){
	if (word.length() <= max_password_lenght){
		printout(word);
		word_counter++;
		string new_word;
		for (int i = 0; i < size_of_allowed_characters; i++){
			string add_character;
			add_character = allowed_characters[i];
			new_word = word + add_character;
			generate_next_word(new_word);
		}
	}
}

void get_time(){
	time_t rtime;
	  struct tm * timeinfo;
	  time(&rtime);
	  timeinfo = localtime(&rtime);
	  cout << asctime(timeinfo) << endl;
}

void * call_start(void *txt){
	sem_wait(&mutex);       /* down semaphore */
	for (int i = 0; i < size_of_allowed_characters; i++){ //-lpthread
		string word;
		word = allowed_characters[i];
		generate_next_word(word);
	}
	sem_post(&mutex);       /* up semaphore */
}

int main(){

	time_t seconds1, seconds2;
	seconds1 = time(NULL);

	cout << "All possible passwords from array of numbers 0-9 are: " << endl;

	pthread_t vlakno1, vlakno2;
	int v1, v2;

	char pokus1[] = "textikA";

	sem_init(&mutex, 0, 1);      /* initialize mutex to 1 - binary semaphore */
	                                 /* second param = 0 - semaphore is local */

	v1 = pthread_create( &vlakno1, NULL, &call_start, (void*)&pokus1);
	v2 = pthread_create( &vlakno1, NULL, &trace_to_file, (void*)&pokus1);
	pthread_join(vlakno1, NULL);
	pthread_join(vlakno2, NULL);

	sem_destroy(&mutex); /* destroy semaphore */
	exit(0);

	//vypis casu
	seconds2 = time(NULL);
	cout << seconds2-seconds1 << endl;
}
Nahlásit jako SPAM
IP: 88.212.40.–
vitamin+8
Grafoman
19. 3. 2012   #2
-
0
-

presun vlakno1(call_start) do mainu.

Nahlásit jako SPAM
IP: 178.143.60.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
zlz
~ Anonymní uživatel
634 příspěvků
19. 3. 2012   #3
-
+1
-
Zajímavé

   

v1 = pthread_create( &vlakno1, ...
v2 = pthread_create( &vlakno1, ... // <-- vlakno2
Nahlásit jako SPAM
IP: 213.211.51.–
Ezechiel0
Newbie
19. 3. 2012   #4
-
0
-

Chyba je tu:

v1 = pthread_create( &vlakno1,...
v2 = pthread_create( &vlakno1 ---> tu ma byt &vlakno2

Teraz prve vlakno generuje tak ako ma, akurat druhe co zapisuje do logu tam zapise iba 1x, asi niekde budem mat zle semafory, ale neviem prist na to. Ak niekto poradi budem vdacny :)

Nahlásit jako SPAM
IP: 88.212.40.–
Ezechiel0
Newbie
19. 3. 2012   #5
-
0
-

Ok, problem som vyriesil, mozem ist v klude spat :D

Semafory som odstranil a do logu zapisujem len kym existuje vlakno1.

Este raz vdaka z prispevky.

Nahlásit jako SPAM
IP: 88.212.40.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 46 hostů

Podobná vlákna

Vlakno — založil Miro1701

Super vlákno :D — založil crazy

Vlákno - Thread — založil Kenvelo

C++ programovanie vlákno — založil limetka123

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý