将int和string参数传递给线程C ++

时间:2012-11-22 21:45:14

标签: c++ c string multithreading parameters

我正在使用_beginthead()来启动我的线程。我需要将3个参数传递给线程:一个字符串和两个整数。 这就是我所拥有的,这绝不是整个程序,而且我已经采取了一些与问题无关的事情(忽略与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”。此外,我的结构似乎没有任何问题,因为就像我说的那样,两个整数完美地工作,并且我没有在字符串上得到任何错误,它只是没有被传递。

所以无论如何,如果有人能够对这个主题有所启发,那就太棒了。

2 个答案:

答案 0 :(得分:1)

我要说的主要问题是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];

答案 1 :(得分:0)

我的假设是你的main定义造成了这个问题:

void main(char **arg_p, int arg_count)

除了void应该是int之外,第一个参数应该是参数计数,而其余参数是参数。尝试切换它们:

void main(int arg_count, char **arg_p)