C++带参数的多线程程序
时间: 2023-12-29 19:54:38 浏览: 69
以下是一个带参数的多线程程序的示例,其中线程函数接受一个整数参数,表示线程的编号,然后打印出该线程的编号和当前时间:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <time.h>
void *thread_func(void *arg) {
int thread_num = *(int*)arg;
time_t curr_time;
char *time_str;
curr_time = time(NULL);
time_str = ctime(&curr_time);
printf("Thread %d: current time is %s", thread_num, time_str);
return NULL;
}
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s num_threads\n", argv[0]);
exit(1);
}
int num_threads = atoi(argv[1]);
pthread_t threads[num_threads];
int thread_args[num_threads];
int i, rc;
for (i = 0; i < num_threads; i++) {
thread_args[i] = i;
rc = pthread_create(&threads[i], NULL, thread_func, &thread_args[i]);
if (rc) {
printf("Error: return code from pthread_create() is %d\n", rc);
exit(1);
}
}
for (i = 0; i < num_threads; i++) {
rc = pthread_join(threads[i], NULL);
if (rc) {
printf("Error: return code from pthread_join() is %d\n", rc);
exit(1);
}
}
return 0;
}
```
在主函数中,首先解析命令行参数,然后创建 `num_threads` 个线程,并分配每个线程的参数。在这个示例中,参数只是线程的编号,但是它可以是任何类型的数据结构。
然后,主函数等待所有线程完成执行,然后退出。在每个线程函数中,线程首先将参数转换为整数,然后获取当前时间并打印出来。注意,线程函数应该返回 `void*` 类型的指针,因此在这个例子中,我们只是返回了 `NULL`。
阅读全文