`
444878909
  • 浏览: 639041 次
文章分类
社区版块
存档分类
最新评论

简单尝试windows多线程程序

 
阅读更多

这两天因工作需要,写了个算法,计算复杂度较高。期望利用多核机器的优势,并行计算,加快运行速度。简单看了看资料,尝试两个小程序。

程序一:函数能并行运行就OK。

DWORD WINAPI Fun(LPVOID lpParamter)
{

	  cout<<"Fun display"endl; 
	  i++;
}

int main (void)
{
	cout << "Now starting to verify multi-thread on windows" << endl;

	HANDLE hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);
    CloseHandle(hThread);
    while(1) 
	{ 
		cout<<"main display!"<<endl;  
		Sleep(2000);
	}

	cout << "Press anykey to bye-bye" << endl;
	getchar();

	return 0;
}

程序二:传个参数进到并发函数中,如下:

DWORD WINAPI Fun(LPVOID lpParamter)
{
	int iCount = *((int*)lpParamter);
	int i = 0;
    while(i < iCount) 
	{ 
	  cout<<"Fun display in the "<< i << " times" <<endl; 
	  i++;
	  // Sleep(1000);
	}
	return iCount;
}


int main (void)
{
	cout << "Now starting to verify multi-thread on windows" << endl;

    int i = 1000;
    HANDLE hThread = CreateThread(NULL, 0, Fun, &i, 0, NULL);
    CloseHandle(hThread);
    while(1) 
	{ 
		cout<<"main display!"<<endl;  
		Sleep(2000);
	}

	getchar();

	return 0;
}
程序三:在写上两个程序的时候,听说OpenMP神器,尝试一下

int main (void)
{
	cout << "Now starting to verify multi-thread on windows" << endl;

	int iArray [100];
	for (int i=0; i<100; i++)
		iArray[i] = i;

	#pragma omp parallel for num_threads(2)
	for (int i=0; i<100; i++)
		cout << iArray[i] << endl;

	getchar();

	return 0;
}
运行的时候,可以看到:1. 双核都在计算;2. 数组实际上是乱序输出(多个线程并发的结果)。


最后我工作中采用的是OpenMP。


分享到:
评论

相关推荐

    AnimateIcon多线程动画演示VC 6.0源程序.rar

    功能: 多线程动画演示程序。 动机: 1. 尝试为自己的程序添加活泼一点的界面。 2. 练习多线程编程技术,尤其是解决线程之间的同步问题。 3. 练习资源的提取与转换。 说明: 1. ImageList项下的两个图形均由我编制的...

    windows环境下32位汇编语言程序设计

    本书尝试从编写应用程序的角度,从“Hello,World”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过70多个从简单到复杂的例子,逐步深入Win32汇编编程的方方面面。笔者从事汇编编程已经有十几...

    Windows 系统错误代码简单分析

    Microsoft Windows 系统错误代码简单分析:  0000 操作已成功完成。  0001 错误的函数。  0002 系统找不到指定的文件。  0003 系统找不到指定的路径。  0004 系统无法打开文件。  0005 拒绝访问。...

    一个进程池的服务器程序

    if (write_pid() ) //避免同时有多个该程序在运行 return -1; if (pipe(fd1) ) { perror("pipe failed"); exit(-1); } if (s_pipe(fd2) ) { perror("pipe failed"); exit(-1); } int port = atoi(argv...

    从汇编语言到Windows内核编程

    读者已经尝试过探索Windows内核程序,并尝试阅读反汇编代码。那么接下来,必须掌握修改内核的方法。每一个Windows内核程序,都可以看做Windows内核本身的一个“补丁”。有时只需要独立存在,就能起到它的作用;有时...

    天书夜读:从汇编语言到Windows内核编程(完整版一)

    读者已经尝试过探索Windows内核程序,并尝试阅读反汇编代码。那么接下来,必须掌握修改内核的方法。每一个Windows内核程序,都可以看做Windows内核本身的一个“补丁”。有时只需要独立存在,就能起到它的作用;有时...

    天书夜读:从汇编语言到Windows内核编程(完整版 二)

    读者已经尝试过探索Windows内核程序,并尝试阅读反汇编代码。那么接下来,必须掌握修改内核的方法。每一个Windows内核程序,都可以看做Windows内核本身的一个“补丁”。有时只需要独立存在,就能起到它的作用;有时...

    Android程序设计基础

    程序多任务性能优秀,切换迅速等。当然,它也具有系统细节不完善、电源管理不好、软件的界面不太好、支持的软件厂商还比较少等缺点。但是凭借谷歌公司的强大实力以及与开放手机联盟的通力合作,我们相信Android会...

    windows下iperf 2.0.4

    当P线程或Win32线程可用时,支持多线程。客户端与服务端支持同时多重连接 UDP 客户端可以创建指定带宽的UDP流 测量丢包 测量延迟 支持多播 当P线程可用时,支持多线程。客户端与服务端支持同时多重连接(不支持...

    天书夜谈:从汇编语言到Windows内核编程

    读者已经尝试过探索Windows内核程序,并尝试阅读反汇编代码。那么接下来,必须掌握修改内核的方法。每一个Windows内核程序,都可以看做Windows内核本身的一个“补丁”。有时只需要独立存在,就能起到它的作用;有时...

Global site tag (gtag.js) - Google Analytics