写一个c++使用多线程的代码
时间: 2023-03-09 19:30:32 浏览: 145
#include <stdio.h>
#include <pthread.h>void *func1(void *arg)
{
printf("线程1正在执行\n");
return NULL;
}void *func2(void *arg)
{
printf("线程2正在执行\n");
return NULL;
}int main()
{
pthread_t t1, t2;
int i = 0;
int ret;
// 创建线程1
ret = pthread_create(&t1, NULL, func1, NULL);
if (ret != 0)
{
printf("创建线程1失败\n");
}
// 创建线程2
ret = pthread_create(&t2, NULL, func2, NULL);
if (ret != 0)
{
printf("创建线程2失败\n");
}
// 等待线程结束
pthread_join(t1, NULL);
pthread_join(t2, NULL);
return 0;
}
相关问题
使用c++ 写一个多线程监听socket
好的,下面是使用 C++ 多线程监听 socket 的示例代码:
```c++
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <thread>
#include <chrono>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
void handle_connection(int client_socket) {
// 处理与客户端的通信
char buffer[1024];
int n;
while ((n = read(client_socket, buffer, sizeof(buffer))) > 0) {
write(client_socket, buffer, n);
memset(buffer, 0, sizeof(buffer));
}
close(client_socket);
}
int main() {
// 创建监听 socket
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket == -1) {
std::cerr << "Error: Failed to create socket.\n";
return EXIT_FAILURE;
}
// 绑定监听地址和端口
sockaddr_in server_addr;
std::memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(8080);
if (bind(server_socket, (sockaddr*) &server_addr, sizeof(server_addr)) == -1) {
std::cerr << "Error: Failed to bind address.\n";
close(server_socket);
return EXIT_FAILURE;
}
// 开始监听连接请求
if (listen(server_socket, SOMAXCONN) == -1) {
std::cerr << "Error: Failed to listen for connections.\n";
close(server_socket);
return EXIT_FAILURE;
}
std::cout << "Listening for connections on port 8080...\n";
// 接受连接请求并处理
while (true) {
sockaddr_in client_addr;
socklen_t client_addr_size = sizeof(client_addr);
int client_socket = accept(server_socket, (sockaddr*) &client_addr, &client_addr_size);
if (client_socket == -1) {
std::cerr << "Error: Failed to accept connection.\n";
continue;
}
// 创建新线程处理与客户端的通信
std::thread connection_thread(handle_connection, client_socket);
connection_thread.detach();
}
close(server_socket);
return EXIT_SUCCESS;
}
```
在这个示例代码中,我们首先创建了一个监听 socket,然后将其绑定到本地地址和端口上,并开始监听连接请求。每当有一个新的连接请求到达时,我们都会创建一个新的线程来处理与客户端的通信,而主线程则继续监听连接请求。对于每个连接,我们都使用一个单独的线程来处理,这样就可以同时处理多个连接,并提升应用程序的并发性能。在通信结束后,我们关闭与客户端的连接,并让线程自行结束。
请注意,这只是一个简单的示例代码,实际应用程序需要更加健壮和稳定,需要处理更多的错误情况,并采用更好的线程池或协程等技术来提升性能。
c++写一段多线程代码
当然,请问您需要实现哪种多线程程序呢?可能需要一些具体的背景和需求来更好地编写代码。不过,下面提供一个简单的多线程代码示例:
```c
#include <pthread.h>
#include <stdio.h>
#define THREAD_NUM 3
void* thread_func(void* arg)
{
int* num = (int*) arg;
printf("Thread ID: %ld, Number: %d\n", pthread_self(), *num);
pthread_exit(NULL);
}
int main()
{
pthread_t threads[THREAD_NUM];
int nums[THREAD_NUM] = {1, 2, 3};
for (int i = 0; i < THREAD_NUM; i++) {
int ret = pthread_create(&threads[i], NULL, thread_func, (void*) &nums[i]);
if (ret) {
printf("Error: unable to create thread, return code: %d\n", ret);
return -1;
}
printf("Created thread #%d, ID: %ld\n", i, threads[i]);
}
pthread_exit(NULL);
}
```
该代码中,定义了一个 `thread_func()` 函数作为线程执行的函数体,其中通过 `pthread_self()` 获取当前线程 ID 和 `arg` 指针获取传递给线程的参数。然后,在 `main()` 函数中创建 `THREAD_NUM` 个线程,每个线程传递一个不同的整数参数给 `thread_func()` 函数,通过 `pthread_create()` 创建线程并保存了线程 ID。最后,等待所有线程执行完毕并释放资源,使用 `pthread_exit()` 实现。
请注意,线程编程需要特别注意线程安全和锁控制等问题。如果您需要更复杂的多线程程序,建议使用专业的线程库或框架来实现。