2012-11-22 2 views
2

스레드를 시작하려면 _beginthead()를 사용하고 있습니다. 스레드에 3 개의 매개 변수를 전달해야합니다. 하나의 문자열과 2 개의 int입니다. 여기에 제가 가지고있는 것은, 전체 프로그램입니다. 실제 프로그램 메인이 실제로 메인이 아니기 때문에, 메인과 관련된 실수를 무시하고 문제와 관련이없는 것들을 가져 왔습니다. 그리고 그것은 단지 일반적인 기능입니다) :int 및 string 매개 변수를 스레드 C++에 전달

typedef struct ST 
{ 
    char *ip; 
    int port; 
    int dur; 
}thestruct; 

void main(char **arg_p, int arg_count) 
{ 
    char *ip; 
    int port, duration; 
    ip = (char *)malloc(sizeof(char)); 
    ip = arg_p[0]; 
    port = atoi(arg_p[1]); 
    duration = atoi(arg_p[2]); 

    thestruct *st; 
    st = (thestruct *)malloc(sizeof(thestruct)); 
    st->dur = duration; 
    st->ip = (char *)malloc(sizeof(char)); 
    st->ip = ip; 
    printf("ip: %s\n", st->ip); 
    st->port = port; 

    _beginthread((void(*)(void*))connect, 0, (void*)st); 
} 

void connect(thestruct *s) 
{ 
    Sleep(100); 
    char *ip = static_cast<char*>(s->ip); 
    int port = s->port; 
    int dur = s->dur; 
    printf("ip: %s\nport: %i\ndur: %i", ip, port, dur); 
    _endthread(); 
} 

문자열, ip가 스레드로 올바르게 전달되지 않는 것을 제외하면 모든 것이 잘 작동합니다. 첫 번째 printf 호출은 IP를 완벽하게 출력 한 다음 스레드 내에서 "ip :"를 출력하고 그 후에는 비어 있습니다. 그런 다음 새로운 라인으로 이동하여 포트와 지속 시간을 완벽하게 출력합니다.

나는이 문제 주제를 잠깐 동안 연구 해왔다. 왜냐하면 대부분의 사람들은 하나의 문자열이나 그와 비슷한 것을 전달하기 만하면되기 때문이다. 인터넷 검색에서 찾을 수있는 것은 모두 단일 문자열을 전달하는 사람들뿐입니다. 물론 작동합니다.

예를 들어 "127.0.0.1 1234 25"를 전달합니다. 또한, 말했듯이 두 정수가 완벽하게 작동하고 문자열에 오류가 발생하지 않기 때문에 구조체에 문제가없는 것 같습니다. 전달되지 않았습니다.

어쨌든 누구나 주제에 대해 밝힐 수 있다면 좋을 것입니다.

+0

FYI : C++에서'typedef struct' /'typedef class'는 필요 없습니다. –

+0

프로그램 인수로 무엇을 전달합니까? –

+0

제 생각에 정수가 될 때 첫 번째 인수에'char ** arg_p'를 사용하고 있습니다. –

답변

1

주된 문제는 connect()이 인쇄 된 후 인쇄 된 내용을 플러시하는 것입니다.

int main(int, char **) 

이 아닌 다른 방법의 원형이 그 게다가


.

void * (*)(void *) 

그래서 그것이 있어야 : 또한

void * connect(void * pv) 
{ 
    thestruct * s = pv; 
    ... 

st->ip = ip; 
,536


또 다른 문제는 스레드 함수로 정의되어있다

은 할당에 의해 반환되기 직전의 주소를 덮어 씁니다.

당신은 더 나은 문자를 복사 할 :

strcpy(st->ip, ip); 

이 줄 ip는 다음 줄에 덮어 쓰기로

ip = (char *)malloc(sizeof(char)); 

가 중복 :

ip = arg_p[0]; 
+0

주요 함수 정의에서 보이는 문제를 무시하십시오. 이 코드는 단지 코드 일 뿐이며 불필요한 코드는 생략하고 있음을 명심하십시오. 문제가있는 곳이기 때문에 구조와 스레드에 더 집중하십시오. – Ian

+0

새로 추가 된 줄 "strcpy (st-> ip, ip)"에 도달하면 예외가 발생합니다. – Ian

+0

'st-> ip = (char *) malloc (sizeof (char));'sizeof (char)'가'1'이므로 충분한 메모리를 할당하지 않는다. @ user1846111 – alk

0

내 가정은 그것은 당신의 문제를 일으키는 main definintion입니다 : voidint 있어야한다는 사실을 제외하고

void main(char **arg_p, int arg_count) 

나머지는 인수가있는 동안, 첫 번째 인수는 인수 카운트 예정이다. 그것들을 바꾸어보십시오 :

void main(int arg_count, char **arg_p) 
관련 문제