VS C++ 執行緒篇之二建立執行緒(傳遞引數)
阿新 • • 發佈:2019-02-14
例程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)
請按任意鍵繼續. . .