控制台中使用多线程编程
来源:互联网 发布:什么是面向对象的编程 编辑:程序博客网 时间:2024/05/16 17:44
线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
以上来自百度百科。多线程技术会让程序变得更加强大,是单线程永远无法实现的。例如,在命令行中,用户正在响应getchar函数,而我需要在用户输入的同时将命令行标题改为现在的时间,这个效果是单线程永远不可能达到的。学习了本教程的内容,上面的例子就不难做到。
首先,认识API函数CreateThread:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
参数及其复杂,但事实上在普通的编程中大多数参数基本不需要用到。直接看示例代码:
void Thread1()
{
for(;;)
{
system("title %time%");
}
}
void main(int argc, char* argv[])
{
HANDLE hThread;
DWORD ThreadID;
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&ThreadID);
getchar();
}
(如果提示getchar未定义,请加入stdio.h头文件)
是否实现了我们例子中想要的效果?让我们来分析一下代码。
首先,在main函数中使用API函数CreateThread创建了一个线程,线程的内容就是执行Thread1函数(参数三),然后就到了getchar函数中等待用户的输入完成。而在此同时,刚刚创建的线程正在执行Thread1函数的内容,就是不断地将命令行标题设置为当前时间。于是,我们的效果便达成了。
CreateThread返回的是线程的HANDLE,示例代码中是保存在hThread变量中。CreateThread会将第五个参数设置为线程的ID。线程的HANDLE和ID都是很重要的参数,对以后线程的其他操作有很重要的意义。
那么,再介绍几个API函数,这几个函数比较简单,请读者们自由测试:
DWORD SuspendThread(
HANDLE hThread
);
这个是挂起线程的API函数,用于暂停线程的执行。参数为创建线程时返回的线程HANDLE。
DWORD ResumeThread(
HANDLE hThread
);
这个是继续执行线程的API函数,用于将已经挂起的线程恢复执行,与SuspendThread对应。参数为创建线程时返回的线程HANDLE。
VOID ExitThread(
DWORD dwExitCode
);
这个是停止(销毁)线程的API函数,只能在线程内部使用。参数为退出码,一般可设为0。
BOOL TerminateThread(
HANDLE hThread,
DWORD dwExitCode
);
这个是强行停止(销毁)线程的API函数,能在程序的任意部分使用。但是使用这一API函数来终止线程是不安全的,可能造成程序不稳定。不推荐使用。参数一为创建线程时返回的线程HANDLE,参数二为退出码,一般可设为0。
现在,只需稍加练习,就可熟练的进行多线程编程了。
- 控制台中使用多线程编程
- 控制台中使用settimer
- 控制台中使用SetTimer的提醒
- emacs 在控制台中 使用菜单
- VS2008 控制台中使用CFileDialog类
- Win32控制台中使用定时器的方法
- 在Linux的控制台中使用GDB调试程序
- Win32控制台中使用CString类的方法
- Qt5使用qDebug()在windows控制台中输出信息
- 多线程编程练习:使用变量控制多线程调用顺序
- win32汇编---控制台中输出
- 控制台中输出宽字符
- Jenkins控制台中乱码问题
- java控制台中打印万年历
- 往控制台中写数据
- python 进行多线程编程,使用Semaphore控制线程数
- 不允许使用循环语句、条件语句,在控制台中打印出1-200这200个数
- java使用Scanner类循环从控制台中获取数据的方法代码。
- c#频繁读取word文件 所请求的剪切板操作失败 解决方法
- PowerShell 学习笔记-- 2 -- 杂项设置
- Eclipse 常用快捷键
- App hub功能改进详解
- 深入研究java.lang.Class类
- 控制台中使用多线程编程
- 客户端连接RAC&TNS-12545
- Oracle分区索引什么情况下会重建
- DSP入门之--CCS菜单主要功能说明
- DSP入门之--GEL文件的作用与功能
- 一位女程序员遇到的问题,大家帮她想想应该怎么办!!!!!
- win7 下安装 sourceinsight 遇到的问题:安装后启动不起来
- 技术成长的成功之路
- DSP入门之--CMD文件配置详解