1. 程式人生 > >VS C++ 執行緒篇之二建立執行緒(傳遞引數)

VS C++ 執行緒篇之二建立執行緒(傳遞引數)

例程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, &param , 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, &param , 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)
請按任意鍵繼續. . .