我正在使用_beginthead()启动我的线程。我需要将3个参数传递给线程:一个字符串和两个整数。
这就是我所拥有的,这绝不是整个程序,而且我已经拿出一些与问题无关的东西(忽略main的错误,因为在我的实际程序中main实际上不是main,而这只是一个常规函数):

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”。另外,我的结构似乎没有任何问题,因为就像我说的那样,两个整数可以完美地工作,并且我在字符串上没有任何错误,只是没有被传递。

因此,无论如何,如果有人可以在这个话题上大放异彩,那就太好了。

最佳答案

我要说的主要问题是,main()connect()完成其打印并刷新其打印内容之前就退出了。

除此以外:

int main(int, char **)

并非相反。

另一个问题是线程函数定义为:
void * (*)(void *)

所以应该是:
void * connect(void * pv)
{
  thestruct * s = pv;
  ...


st->ip = ip;

将覆盖分配刚刚返回的地址。

您最好要复制字符:
strcpy(st->ip, ip);

这条线
ip = (char *)malloc(sizeof(char));

在下一行覆盖ip时是多余的:
ip = arg_p[0];

关于c++ - 将int和字符串参数传递给线程C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13520379/

10-11 00:36
查看更多