VC++ 6.0下多线程编程的最简单实例

今天上午开会的时候,有师弟建议我举个多线程编程最简单的实例,于是开完会后找出了自己5年前写的代码,简单看了看。有时候,我们使用多线程仅仅是为了提高并行处理的效率,那么这时候可以不考虑原子性操作、同步互斥等问题。简单参考了一下网上的很多教程,结合自己之前的代码,举个例子(这里以最简单的Win32控制台程序为例):

首先需要设置工程属性,以支持多线程,以VC++ 6.0 IDE中文版为例,设置方法是:

“工程”——“设置”——“C/C++”选项卡——下拉式列表中选择“Code Generation”——在“Use Run-Time Library”下拉式清单方块中,可以看到用于“Release”设定的“Single-Threaded”和用于Debug设定的“Debug Single-Threaded”。将这些分别改为“Multithreaded”和“Debug Multithreaded”。

自己编写了一段最简单的VC++ 6.0代码:

#include "stdafx.h"
#include <windows.h>
#include <iostream.h>

UINT ComputeProc(int *i);/*线程函数头*/

int main(int argc, char* argv[])
{
	int j=0;
	HANDLE hThread1;
    HANDLE hThread2;
	hThread1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ComputeProc,&j,0,NULL);/*创建线程,其中第四个参数是LPVOID lpParameter,不限制类型的指针参数*/
	j++;
    hThread2=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ComputeProc,&j,0,NULL);
	Sleep(2000);
	TerminateThread(hThread1,1);
    TerminateThread(hThread2,1);
	CloseHandle(hThread1);
    CloseHandle(hThread2);
	return 0;
}

UINT ComputeProc(int *i)
{
	int k=*i;
	printf("The result is %d. \n",k);/*从输出可以看到子线程和父线程是同时运行的*/
	return 0;
}

需要指出的是,真正的多线程编程还是较为复杂的,存在data races, atomicity violations和order violations等问题,目前仍是软件工程研究领域在着力解决的热点和难点问题。

另外,之前在VC下编写Socket程序的时候,如果需要手动定义IP包头或者TCP包头,一般都是用结构体进行定义,我参考了一下之前的代码,例如:

typedef struct icpm_har
{
	unsigned char icmp_type;
	unsigned char icmp_code;
	unsigned short icmp_checksum;
    unsigned short identify;
	unsigned short serial_num;
}ICMP_HDR,*PICMP_HDR; /*ICMP包头*/

typedef struct TCPHeader
{
	USHORT sourcePort;
	USHORT destinationPort;
	ULONG sequenceNumber;
	ULONG acknowledgeNumber;
	UCHAR dataoffset;
	UCHAR flags;
	USHORT windows;
	USHORT checksum;
	USHORT urgentPointer;
}TCPHeader,*PTCPHeader; /*TCP包头*/

以上两点仅供参考。

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第一章 1·带图标的菜单 2·显示倾斜文字 3·文字的颜色渐变 4·设置并叠加透明图片 5·颜色渐变进度条 6·透明窗体 第二章 7·调色程序 8·颜色下拉框 9·模拟拷贝进程 10·通用对话框 11·窗体分割 12·实现QQ程序的抽屉效果 13·以动画方式弹出,关闭窗口 14·半透明窗体 15·获得指定点颜色 16·判知图片大小 17·图片的伸缩显示 18·浏览大图 19·放大局部图形 20·屏幕抓图 21·裁剪位图 22·填充区域图象 23·列表项的提示条 24·浮动的鼠标提示 25·控制工具栏的按钮组 26·工具栏上设置下拉按钮 27·使窗体保持在最前 28·模仿windows任务拦 29·定义光标热区 30·拖放选中对象 第三章 31·调节系统音量 32·控制混音效果 33·播放WAV文件 34·再现windows的CD播放器 35·小解霸--VCD经典控制 36·播放rm文件 第四章 37·文字逐个出现模仿打字 38·嵌入式时钟 39·程序中嵌入日历 40·毫秒级的控制 41·读写系统时间 42·同步网络时间 第五章 43·编写屏保程序 44·屏蔽系统热键和隐藏任务拦 45·动态调整屏幕分辨率 46·获取系统硬件信息 47·编辑注册表信息 48·重启动和关闭计算机 49·获取windows版本号和运行模式 50·枚举可用字体 第六章 51·向导程序 52·系统托盘程序 53·隐藏程序不被关闭程序发现 54·枚举系统正在运行的程序 55·启动并控制其他exe程序 56·禁止运行程序多个实力 57·禁止程序右上角各按钮 58·多线程方式同时进行多项任务 59·线程优先级示例==赛马 60·利用剪贴板实现exe程序间的数据交换 61·通过内存映射实现exe程序间的数据交换 62·通过消息机制实现exe程序间的数据交换 第七章 63·获取驱动器序列号 64·获取磁盘空间数据 65·判别并定位到光驱(软驱) 66·嫡归法遍历磁盘目录 67·获得文件属性 68·删除不为空的目录 69·快速检索指定文件 70·拷贝,删除和移动文件 71·读写INI文件 72·读写大块资料(二进制) 73·文件变更通知 第八章 74·格式化数字 75·中文大写数字 76·存取图象字段 77·ADO控制access数据库 78·SQL语句中设置时段检索条件 79·SQL语句中设置字符串检索条件 80·SQL语句中设置多个字符串检索条件 81·SQL语句嵌套 82·代码控制链接ODBC 第九章 83·获取网卡地址 84·获得主机名和IP地址 85·端口扫描 86·判断网址是否有效 87·枚举局域网内计算机 88·连续批量Ping测试 89·设置IE的标题 90·收发电子邮件 91·FTP上传下载 92·网络聊天WINSOCK-TCP 93·广播信息WINSOCK-UDP 94·电话拨号上网 第十章 95·进制转换 96·随机选号 97·统计中英文字符数 第十一章 98·鼠标位置追踪 99·代码控制光标 100·模拟鼠标单双击 101·模拟键盘输入 102·限定鼠标区域 103·截获鼠标移开事件 104·截获键盘信息 第十二章 105·产生程序序列号 106·建立一个快捷方式 107·设置程序为自动被执行 108·注册与卸载OCX 109·限定程序的使用时限 110·在IE工具栏中加入快捷图标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值