我正在使用 _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”。另外,我的结构似乎没有任何问题,因为就像我说的那样,这两个整数工作得很好,而且我在字符串上没有任何错误,只是没有被传递。
所以无论如何,如果有人能对这个话题有所了解,那就太好了。