VS C++ 线程篇之二创建线程(传递参数)
2018-03-24 23:53
288 查看
例程1:传递整型参数#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
DWORD WINAPI ThreadProFunc(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
int param = 20;
hThread = CreateThread( NULL, NULL, ThreadProFunc, ¶m , 0, &dwThreadId);
CloseHandle(hThread); //关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
printf("param = %d\n", *(int*)lpParam);
return 0;
}运行结果:param = 20
请按任意键继续. . .
例程2:传递字符串#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
DWORD WINAPI ThreadProFunc(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
char param[] = "hello";
hThread = CreateThread( NULL, NULL, ThreadProFunc, param, 0, &dwThreadId);
CloseHandle(hThread); //关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
printf("param = %s\n", (char*)lpParam);
return 0;
}运行结果param = hello
请按任意键继续. . .
例程3:传递结构体参数#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
typedef struct {
int x;
int y;
}Coord;
DWORD WINAPI ThreadProFunc(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
Coord param = {10, 20};
hThread = CreateThread( NULL, NULL, ThreadProFunc, ¶m , 0, &dwThreadId);
CloseHandle(hThread); //关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
printf("x = %d, y = %d\n", ((Coord*)lpParam)->x, (*(Coord*)lpParam)->y);
return 0;
}运行结果
x = 10, y = 20
请按任意键继续. . .例程4:传递对象(C++内置对象)#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <iostream>
using namespace std;
DWORD WINAPI ThreadProFunc(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
string str = "hello world";
//string *pStr = new string("nihao");
hThread = CreateThread( NULL, NULL, ThreadProFunc, &str, 0, &dwThreadId);
CloseHandle(hThread); //关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
cout << *(string*)lpParam << endl; // string 内置对象使用std::cout打印,printf不能直接打印
return 0;
}运行结果hello world
请按任意键继续. . .例程4:传递对象(C++自定义对象)#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <iostream>
using namespace std;
class Coord {
public:
Coord(int x, int y)
{
m_iX = x;
m_iY = y;
}
~Coord(){};
void printInfo()
{
printf("coord(%d,%d)\n", m_iX, m_iY);
}
private:
int m_iX;
int m_iY;
};
DWORD WINAPI ThreadProFunc(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
Coord var(10,20);
hThread = CreateThread( NULL, NULL, ThreadProFunc, &var, 0, &dwThreadId);
CloseHandle(hThread); //关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
((Coord*)lpParam)->printInfo();
return 0;
}运行结果
coord(10,20)
请按任意键继续. . .
#include <stdio.h>
#include <windows.h>
DWORD WINAPI ThreadProFunc(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
int param = 20;
hThread = CreateThread( NULL, NULL, ThreadProFunc, ¶m , 0, &dwThreadId);
CloseHandle(hThread); //关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
printf("param = %d\n", *(int*)lpParam);
return 0;
}运行结果:param = 20
请按任意键继续. . .
例程2:传递字符串#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
DWORD WINAPI ThreadProFunc(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
char param[] = "hello";
hThread = CreateThread( NULL, NULL, ThreadProFunc, param, 0, &dwThreadId);
CloseHandle(hThread); //关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
printf("param = %s\n", (char*)lpParam);
return 0;
}运行结果param = hello
请按任意键继续. . .
例程3:传递结构体参数#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
typedef struct {
int x;
int y;
}Coord;
DWORD WINAPI ThreadProFunc(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
Coord param = {10, 20};
hThread = CreateThread( NULL, NULL, ThreadProFunc, ¶m , 0, &dwThreadId);
CloseHandle(hThread); //关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
printf("x = %d, y = %d\n", ((Coord*)lpParam)->x, (*(Coord*)lpParam)->y);
return 0;
}运行结果
x = 10, y = 20
请按任意键继续. . .例程4:传递对象(C++内置对象)#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <iostream>
using namespace std;
DWORD WINAPI ThreadProFunc(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
string str = "hello world";
//string *pStr = new string("nihao");
hThread = CreateThread( NULL, NULL, ThreadProFunc, &str, 0, &dwThreadId);
CloseHandle(hThread); //关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
cout << *(string*)lpParam << endl; // string 内置对象使用std::cout打印,printf不能直接打印
return 0;
}运行结果hello world
请按任意键继续. . .例程4:传递对象(C++自定义对象)#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <iostream>
using namespace std;
class Coord {
public:
Coord(int x, int y)
{
m_iX = x;
m_iY = y;
}
~Coord(){};
void printInfo()
{
printf("coord(%d,%d)\n", m_iX, m_iY);
}
private:
int m_iX;
int m_iY;
};
DWORD WINAPI ThreadProFunc(LPVOID lpParam);
int main(int argc, char **argv)
{
HANDLE hThread;
DWORD dwThreadId;
Coord var(10,20);
hThread = CreateThread( NULL, NULL, ThreadProFunc, &var, 0, &dwThreadId);
CloseHandle(hThread); //关闭线程句柄
system("pause");
return 0;
}
DWORD WINAPI ThreadProFunc(LPVOID lpParam)
{
((Coord*)lpParam)->printInfo();
return 0;
}运行结果
coord(10,20)
请按任意键继续. . .
相关文章推荐
- [原创]vc中创建线程并传递参数
- CreateThread创建线程传递结构体参数
- CreateThread创建线程传递结构体参数
- 使用NSOperation使用,创建线程中传递多个参数
- C#创建线程传递参数
- 参数按照引用传递创建线程
- 创建多个线程的参数传递问题
- 创建线程时候多参数传递方法及参数改变问题--扫雷辅助(三)
- VC++ 如何创建一个线程并传递参数
- 创建线程时安全传递参数例子
- 创建线程时参数传递技巧-用指针传值
- pthread_create()给创建的线程传递参数
- [转]VC++创建一个线程并传递参数
- 创建一个pthread线程时如何传递参数
- [转]创建线程并传递参数--AfxBeginThread
- C# 给另一线程传递参数
- C# 实现向线程传递参数
- C#中创建带参数的线程
- Task Flow使用指南之二:传递参数给Task Flow(2)
- 线程create时参数的传递问题(转载)