28win32编程基础——线程和进程1
程序放在硬盘就是二进制文件 跑起来的程序就是进程 进程怎么跑起来,就是靠线程跑起来 程序跑起来有一条线,就是线程 进程是静止不动的,就是4GB的空间(32位系统) 线程的动态的。 经典: 进程就是4GB 线程就是EIP 进程就像1个房子,线程共享房子里面的资源。 线程,主要是学好CreateThread这个函数,这个函数大有文章
HANDLE WINAPI CreateThread( __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, //安全属性 __in SIZE_T dwStackSize, //堆栈空间 __in LPTHREAD_START_ROUTINE lpStartAddress, //线程执行的函数 __in_opt LPVOID lpParameter, //传递给线程的参数 __in DWORD dwCreationFlags, //以什么方式创建线程,挂起还是直接运行(等待CPU分配时间片) __out_opt LPDWORD lpThreadId //内核中的线程id );`
主要是线程传参的方法:
1、全局变量
2、线程函数中传参
#include <windows.h>
#include "resource.h"
#include <stdio.h>
#include "OutPut.h"
HINSTANCE hins;
INT_PTR CALLBACK DiaProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine,int nCmdShow)
{
HINSTANCE hins = hInstance;
DialogBox(hInstance, MAKEINTRESOURCE(ID_DIALOG_THREAD),NULL,DiaProc);
OutputDebugStringF("%d",GetLastError());
getchar();
return 0;
}
//线程函数
DWORD WINAPI ThreadProc(__in LPVOID hnd){
TCHAR sz[20];
HWND hwd = GetDlgItem((HWND)hnd,IDC_EDIT1);
//SetWindowText(hwd,TEXT("1000"));
//获取1000
GetWindowText(hwd,sz,20);
int Timer;
//转为数字
sscanf(sz,"%d",&Timer);
while(Timer>0){
Timer--;
//转为字符串
sprintf(sz,"%d",Timer);
//放到
SetWindowText(hwd,sz);
Sleep(1000);
}
return 0;
};
void BeginCalc(HWND hwndDlg){
HANDLE MyThread1 = ::CreateThread(NULL,NULL,ThreadProc,(LPVOID)hwndDlg,0,NULL);
//注意这里并不是关闭线程,只是关闭句柄,只是这里不用了,线程还是存在的。
//句柄相当于1个标识,你可以这样理解,你在学校有个学号,把你的学号撕掉了,并不代表你就死亡了,
//如果还要使用,还有别的方法找到该线程。
::CloseHandle(MyThread1);
}
INT_PTR CALLBACK DiaProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam){
switch(uMsg)
{
case WM_CLOSE:
EndDialog(hwndDlg,0);
return 0;
case WM_INITDIALOG:
{
HWND hwd = GetDlgItem(hwndDlg,IDC_EDIT1);
SetWindowText(hwd,TEXT("1000"));
return 0;
}
case WM_COMMAND:
{
WORD wConid = LOWORD(wParam);
WORD wEvent = HIWORD(wParam);
switch(wConid)
{
case IDC_BUTTON_Begin:
{
if(wEvent == BN_CLICKED)
{
BeginCalc(hwndDlg);
return 0;
}else
{
MessageBox(0,0,0,0);
return 0;
}
/*
BeginCalc(hwndDlg);
return 0;*/
}
}
}
}
return 0;
};

浙公网安备 33010602011771号