CreateThread 传参 const char
时间: 2023-08-16 18:05:25 浏览: 90
您可以使用以下代码创建一个新的线程,并将 const char 类型的参数传递给线程函数:
```c++
#include <iostream>
#include <thread>
void threadFunction(const char* arg) {
std::cout << "Thread function argument: " << arg << std::endl;
}
int main() {
const char* arg = "Hello, world!";
std::thread t(threadFunction, arg);
t.join();
return 0;
}
```
在上面的例子中,我们创建了一个名为 `threadFunction` 的函数,并将 const char 类型的参数 `arg` 传递给它。我们使用 `std::thread` 类创建了一个新的线程,并将 `threadFunction` 函数和 `arg` 参数传递给它。最后,我们使用 `t.join()` 等待线程执行完成。
注意,由于传递的是指针,因此需要确保在线程执行期间不会修改 `arg` 所指向的内存。
相关问题
CreateThread 传参
在使用 `CreateThread` 创建线程时,可以通过传递一个指向参数的指针来向新线程传递参数。具体步骤如下:
1. 定义一个结构体,结构体中包含需要传递的参数。
```c++
struct ThreadParam {
int arg1;
float arg2;
char arg3;
};
```
2. 在主线程中创建结构体并初始化参数。
```c++
ThreadParam param;
param.arg1 = 10;
param.arg2 = 3.14f;
param.arg3 = 'A';
```
3. 使用 `CreateThread` 创建新线程,并将结构体的地址作为参数传递给新线程。
```c++
DWORD threadId;
HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, ¶m, 0, &threadId);
```
4. 在新线程的函数中,通过参数指针获取参数值。
```c++
DWORD WINAPI ThreadFunc(LPVOID lpParam) {
ThreadParam* pParam = (ThreadParam*)lpParam;
int arg1 = pParam->arg1;
float arg2 = pParam->arg2;
char arg3 = pParam->arg3;
// do something with the parameters
return 0;
}
```
注意:由于新线程可能在主线程之后执行,因此需要确保在新线程函数使用参数之前,主线程不会修改参数的值。可以使用互斥锁等机制来保护参数。
SDL_CreateThread 传参示例
当使用SDL_CreateThread函数创建线程时,可以通过传递一个指向函数的指针作为参数来执行线程函数。以下是一个示例代码,用于演示如何使用SDL_CreateThread传递参数:
```c
#include <SDL2/SDL.h>
#include <stdio.h>
// 线程函数
int threadFunction(void* data) {
int threadID = *((int*)data); // 获取传递的参数值
printf("Hello from thread %d\n", threadID);
return 0;
}
int main() {
SDL_Thread *thread;
int threadID = 1; // 定义传递的参数值
// 创建线程
thread = SDL_CreateThread(threadFunction, "Thread", (void*)&threadID);
if (thread == NULL) {
printf("Failed to create thread: %s\n", SDL_GetError());
return -1;
}
// 等待线程结束
SDL_WaitThread(thread, NULL);
return 0;
}
```
在上面的示例中,我们定义了一个`threadFunction`函数作为线程函数,它接受一个`void*`类型的参数`data`。在`main`函数中,我们首先定义了一个整数变量`threadID`作为传递的参数值。然后,我们使用SDL_CreateThread函数创建线程,并将`threadFunction`作为线程函数传递给它。我们还将`&threadID`强制转换为`void*`类型,以便将参数传递给线程函数。最后,我们使用SDL_WaitThread函数等待线程结束。
当我们运行上述代码时,会输出"Hello from thread 1",表示线程函数成功执行,并且传递的参数值也正确。
阅读全文