我们可以将pthread的线程ID作为用户的输入吗? 这是正确的方法吗?
int main(int argc, pthread_t id, char *argv[])
或者在void指针中输入,然后将其转换为long unsigned int?这些都没有给出正确的答案。有没有办法可以做到这一点?
答案 0 :(得分:0)
没有。 C
标准为main
指定了两个签名:
int main(void);
int main(int argc, char *argv[]);
阅读本文了解更多信息 - What are the valid signatures for C's main() function?。您可以将id
pthread作为命令行参数传递给main
,然后在argv
中读取它。 argv
接收可执行文件名作为第一个参数(./program_name
,如下所示),然后提供其他参数。所有参数(由空格分隔)都转换为字符串文字。以
./program_name 123454
在main
内,你会这样做:
// in main
if(argc > 1) {
pthread_t id = strtol(argv[1], NULL, 10) // converts string to decimal int
if(id == 0) {
// either no integer was entered in base 10, or 0 was entered
// handle it
}
// do stuff with id
}
请注意,POSIX不要求pthred_t
为整数类型。它甚至可以定义为结构。您需要查看sys/types.h
标头文件,了解pthread_t
的实施方式。然后,您可以根据您认为合适的方式打印或处理它。
包含stdlib.h
库函数原型的头文件strtol
。顾名思义,它将字符串转换为long int
类型的给定基数。更多关于strtol
的信息,请阅读此内容 - man strtol。
答案 1 :(得分:0)
main
只有两个有效的原型:
int main(void);
int main(int, char**);
如果您希望将任何参数传递给main
,则必须将它们作为字符串传递给参数向量argv
。