Icebound

icebound-area

智障学写程序系列③【不定期更新】

今天主要学的是日了狗一般的线程控制
1 创建一个新的线程
2 挂起或唤醒某一个进程
3 终止一个进程

每一个线程内部必须要有最少一个线程
每个线程必须要有一个入口函数 这个入口函数是回调函数 必须要__stdcall
使用CreareThread创建一个进程
有6个参数分别是
安全属性 堆栈大小 入口函数 传给入口函数的参数 创建进程后是否立即启动 分配的ID号
然后线程启动之后你就不用管它了
可以用WaitForSingleObject来等待它运行结束

使用SuspendThread挂起一个线程 ResumeThread唤醒一个线程
非常好理解。。。

当线程函数运行完毕之后一个线程会自然被终止
可以用TerminateThread强行结束一个线程
但是不推荐 强行结束会什么也不管直接关 有可能造成内存泄露

今天困得一B就是这样。。。。
#include<iostream>
#include<windows.h>
using namespace std;
HANDLE MyThread;
HANDLE ThreadKiller;
DWORD MyThreadId,temp;
DWORD WINAPI MyThreadProc(LPVOID lpParam)
{
	Sleep(100);
	cout<<"LTY你真是屌"<<endl; 
	Sleep(300);
	cout<<"66666666"<<endl; 
	return 0;
}
DWORD WINAPI KillerProc(LPVOID lpParam)
{
	TerminateThread(MyThread,0);
	cout<<"闭嘴吧你"<<endl;
	return 0;
}
int main()
{
	MyThread=::CreateThread(NULL,NULL,MyThreadProc,NULL,0,&MyThreadId);	
	cout<<"My thread has benn created.The id= "<<MyThreadId<<endl;
	::WaitForSingleObject(MyThread,INFINITE);	
 
	MyThread=::CreateThread(NULL,NULL,MyThreadProc,NULL,0,&MyThreadId);
	Sleep(150);
	SuspendThread(MyThread);
	cout<<"一点都不屌"<<endl;
	cout<<"扯淡!"<<endl;
	ResumeThread(MyThread);
	::WaitForSingleObject(MyThread,INFINITE);
 
	MyThread=::CreateThread(NULL,NULL,MyThreadProc,NULL,0,&MyThreadId);
	Sleep(200);
	ThreadKiller=::CreateThread(NULL,NULL,KillerProc,NULL,0,&temp);
	::WaitForSingleObject(ThreadKiller,INFINITE);
 
	::CloseHandle(ThreadKiller);
	::CloseHandle(MyThread);
	return 0;
}
  1. 356688说道:

    honey,how are you