博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++ 6.0下多线程编程的最简单实例
阅读量:5911 次
发布时间:2019-06-19

本文共 1732 字,大约阅读时间需要 5 分钟。

今天上午开会的时候,有师弟建议我举个多线程编程最简单的实例,于是开完会后找出了自己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 
#include
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包头*/

以上两点仅供参考。

 

转载于:https://www.cnblogs.com/quyu/archive/2011/10/19/2217501.html

你可能感兴趣的文章
Android DecorView浅析
查看>>
C 双向链表
查看>>
hdu 5452(树链刨分)
查看>>
LVM Linear vs Striped Logical Volumes
查看>>
Mysql主从备份和SQL语句的备份
查看>>
DEDECMS之三 首页、列表页怎么调用文章内容
查看>>
iOS开发多线程篇 09 —NSOperation简单介绍
查看>>
WINDOWS下调用GetTokenInformation的奇怪之处--两次调用
查看>>
HDU 5813 Elegant Construction 构造
查看>>
Tomcat就是个容器,一种软件
查看>>
php结合redis实现高并发下的抢购、秒杀功能
查看>>
统计服务连接状况
查看>>
Tomcat编译jsp生成Servlet文件的存放位置
查看>>
Android事件总线(三)otto用法全解析
查看>>
js数组实现不重复插入数据
查看>>
[译]使用 Siesta 处理 Swift 网络请求
查看>>
Android 中的子线程解析
查看>>
aidl跨进程通讯
查看>>
小程序上传图片到七牛云(支持多张上传,预览,删除)
查看>>
spring boot 整合mybatis 无法输出sql的问题
查看>>