您的位置:首页 > 编程语言 > C语言/C++

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)
请按任意键继续. . .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: