My Program simply closes down when I run or debug

Hi. I'm new here and with the programming in C++.

I was trying to make a simple test with C++, OO and POSIX Threads, but when I run or debug my program it just stop to run. May someone help me?

Bellow the codes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
CriarThread.cpp

#include <pthread.h> 
#include <sched.h>
#include <stdio.h>
#include <stdiostream.h>
#include <iostream>
#include <stdlib.h>
#include <cstdlib>
#include <iostream>
#include <sys/types.h>
#include <process.h>
#include <string.h>

#include "CriarThread.h"

pthread_mutex_t myMutex;
pthread_attr_t myAttr;

/*----------Cria o ID da Thread de forma global----------*/
pthread_t t1;

using namespace std;

void *ExecutaAcao(void *ptr);

/*----------Construtores----------*/
CriarThread::CriarThread() {
	// TODO Auto-generated constructor stub
}

/*----------Destrutores----------*/
CriarThread::~CriarThread() {
	// TODO Auto-generated destructor stub
}

/*----------Cria um nova Thread----------*/
void CriarThread::NovaThread(){
	
	int result=0;
	char *msg;
    msg = "Thread ";

	result = pthread_create(&t1, &myAttr, ExecutaAcao, (void *) msg);
	
	if (result){
		printf("ERRO:\nCódigo retornado na criação da PThread = %d", result);
		exit(-1);
	}	
}

/*----------Cria o Atributo da nova Thread----------*/
void CriarThread::CriaAtributo(){
	
	/*----------Declaração de Variáveis----------*/
	
	int prio;
	printf("Digite a prioridade da Thread:");
	prio = getchar();
	char *tipoSched;
	printf("Digite o tipo de escalonamento:\n(FIFO, ROUND-ROBIN, OTHER, SPORADIC)\n");
	strupr(gets(tipoSched));
	char *estado;
	printf("Digite seu estado de execucao:\n(SEPARADA ou UNIDA)\n");
	strupr(gets(estado));
	char *escopo;
	printf("Digite o escopo de processamento da mesma:\n(SISTEMA ou PROCESSO)\n");
	strupr(gets(escopo));
	
	/*----------Inicia a estrutura do atributo----------*/
	pthread_attr_init(&myAttr);

	/*	Altera o estado para "separado"; 
	 *	torna a execução da Thread independente ou não das outras
	 */ 
	if (stricmp(estado, (char *)"SEPARADA"))
		pthread_attr_setdetachstate(&myAttr, PTHREAD_CREATE_DETACHED);
	else if (stricmp(estado, (char *)"UNIDA"))
		pthread_attr_setdetachstate(&myAttr, PTHREAD_CREATE_JOINABLE);

	
	/*----------Altera o escopo de execução da Thread----------*/
	
	/*	.1 - Escopo SISTEMA = As threads competem pelo tempo de processamento
	 * 		 conforme a divisão do sistema operacional.
	 */	
	if (stricmp(escopo, (char *)"SISTEMA"))
		pthread_attr_setscope(&myAttr, PTHREAD_SCOPE_SYSTEM);
	
	/*	.2 - Escopo PROCESSO = As threads competem internamente 
	 * 		 dentro do tempo que o processo que as criou possui.
	 */
	else if (stricmp(escopo, (char *)"PROCESSO"))
		pthread_attr_setscope(&myAttr, PTHREAD_SCOPE_PROCESS);

	/*	Sobrescreve o valor padrão da opção INHERITED_SCHED (define se thread 
	 * 	recém-criada herdará os parâmetros e políticas de thread criadora).
	 *  A macro PTHREAD_EXPLICIT_SCHED define que a nova pthread 
	 * 	deverá usar os valores da variável atributo.
	 */
	pthread_attr_setinheritsched(&myAttr, PTHREAD_EXPLICIT_SCHED);
	
	
	/*----------Define a política de escalonamento da Thread----------*/	

	/*	.1 - A primeira política, a First-in First-out (SCHED_FIFO), 
	 * 	 	 leva o escalonador ao comportamento de quem chegar primeiro.
	 * 		 Caso possuam a mesma prioridade, a que chegou primeiro na fila 
	 * 		 de escalonamento conseguirá utilizar o espaço de memória. 
	 * 		 Caso as duas threads possuam prioridades distintas, a de maior 
	 * 		 valor vencerá a disputa.
	 */
	if (stricmp(tipoSched, (char *)"FIFO"))
		pthread_attr_setschedpolicy(&myAttr, SCHED_FIFO);
	
	/*	.2 - Na segunda política, Round-Robin (SCHED_RR), as threads de igual 
	 * 		 prioridade serão escalonadas conforme as frações de tempo para cada 
	 * 		 processo em partes iguais e de forma circular, sem manipulação de 
	 * 		 todos os processos, podendo algumas delas sofrer por preempções.
	 */	
	else if (stricmp(tipoSched, (char *)"ROUND-ROBIN"))
		pthread_attr_setschedpolicy(&myAttr, SCHED_RR);
		
	/*	.3 - A terceira política, definida pela macro SCHED_OTHER, 
	 * 		 é usada para sinalizar que as threads não mais precisam de uma 
	 * 		 política específica de escalonamento.
	 */
	else if (stricmp(tipoSched, (char *)"OTHER"))
		pthread_attr_setschedpolicy(&myAttr, SCHED_RR);
	
	/*	.4 - Na quarta, SCHED_SPORADIC, os processos são ativados irregularmente, 
	 * 		 porém com um intervalo mínimo entre duas invocações consecutivas 
	 * 		 do mesmo processo; implementação do servidor esporádico usada para 
	 * 		 executar processos aperiódicos.
	 */
	else if (stricmp(tipoSched, (char *)"SPORADIC"))
		pthread_attr_setschedpolicy(&myAttr, SCHED_SPORADIC);

	/*----------Define o nível de prioridade----------*/
	myAttr.param.sched_priority = prio;

}

void CriarThread::AguardaFimThread(){
	pthread_join(t1, NULL);
}

void CriarThread::FinalizaThread(){
	pthread_exit(NULL);
}

void CriarThread::AlocaMemoria(){
	pthread_mutex_lock(&myMutex);
}

void CriarThread::LiberaMemoria(){
	pthread_mutex_unlock(&myMutex);
}

void *ExecutaAcao(void *ptr){

    char *msg;
    msg = (char *) ptr;
	for(int i = 0; i < 10000;i++){
		cout <<" #" << i << endl;	
	}
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CriarThread.h

#ifndef CRIARTHREAD_H_
#define CRIARTHREAD_H_

class CriarThread {
public:
	CriarThread();
	virtual ~CriarThread();
	void NovaThread();
	void AguardaFimThread();
	void FinalizaThread();
	void AlocaMemoria();
	void LiberaMemoria();
	void CriaAtributo();
	int ComparaString(char *str1, char *str2);
};
#endif /* CRIARTHREAD_H_ */ 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
TestQNX.cc

#include <cstdlib>
#include <iostream>

using namespace std;

#include "CriarThread.h"

int main(int argc, char *argv[]) {
	cout << "Welcome to the Momentics IDE" << endl;
	
	CriarThread * ct;
	ct = new CriarThread;
	ct->AlocaMemoria();
	ct->CriaAtributo();
	ct->NovaThread();
	ct->AguardaFimThread();
	ct->LiberaMemoria();
	ct->FinalizaThread();
	
	return EXIT_SUCCESS;
}
Try adding getch (); right before "return EXIT_SUCCESS;"
Thanks for the response OHGxLeetGamerxOHG.
I try to use the getch() but I don't know wich library I need to put (I've try <conio.h>, <ncurses.h> and <ncurses/ncurses.h>).

P.S. - 1: When the program call the ct->CriarAtributo(); it stops running in the line 62 of the CriarThread.cpp.

P.S. - 2: I took all the strupr from the code.

P.S. - 3: I'm using IDE QNX Momentics 6.3.2 integrating with the QNX Neutrino RTOS 6.4.
Topic archived. No new replies allowed.