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包头*/

以上两点仅供参考。

 

posted on 2011-10-19 12:56  qysh123  阅读(2805)  评论(2编辑  收藏  举报

导航