스레드를 시작하려면 _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"를 전달합니다. 또한, 말했듯이 두 정수가 완벽하게 작동하고 문자열에 오류가 발생하지 않기 때문에 구조체에 문제가없는 것 같습니다. 전달되지 않았습니다.
어쨌든 누구나 주제에 대해 밝힐 수 있다면 좋을 것입니다.
FYI : C++에서'typedef struct' /'typedef class'는 필요 없습니다. –
프로그램 인수로 무엇을 전달합니까? –
제 생각에 정수가 될 때 첫 번째 인수에'char ** arg_p'를 사용하고 있습니다. –