一个线程函数模板

By | 12月31日
Advertisement

http://zhidao.baidu.com/question/41421810.html

如果是在用VC中想用多个线程运行同样的任务,而这些任务之间没有通讯问题和内存共享的问题,那可以用下面的模板:
DWORD WINAPI TaskThreadProc(LPVOID)
{
// 独立任务
// ...
}

void RunTaskUseMultiThread(int nThreadCount) // 线程个数为nThreadCount
{
HANDLE* threads = new HANDLE[nThreadCount]; // 线程句柄,对线程进行状态的控制时用到
DWORD* idThreads = new DWORD[nThreadCount]; // 线程id,给线程发消息时用到
int i;
for (i = 0; i < nThreadCount; i++)
{
threads[i] = CreateThread( NULL, 0, TaskThreadProc, NULL, CREATE_SUSPENDED, &idThreads[i]); // 创建线程
}
for (i = 0; i < nThreadCount; i++) // 由于生成的是CREATE_SUSPENDED的线程,所以这里开始让线程开始运行
ResumeThread(threads[i]);
WaitForMultipleObjects(nThreadCount, threads, TRUE, INFINITE); // 等待线程运行结束
for (i = 0; i < nThreadCount; i++)
CloseHandle(threads[j]); // 销毁线程
delete [] threads;
delete [] idThreads;
}

先放在这里,后面再看!

Similar Posts:

  • 线程类C++多线程框架(一)--------- new一下就启动一个线程

    之前笔者几篇文章介绍了改线程类的文章. 关联文章的地址 几年前写过一个C++的多线程框架,虽然写完了,但是人一懒做了一次说明以后就没影了,最近把代码整顿了一下,预备发到github上,在这里,再把这个框架总结一下吧. 多线程始终是编程中常见的问题,特别是在Linux的c++上,多线程的封装始终不是很好,当然,有很多第三方库可以用,比如boost之类的,但是我们有时候并不须要那么庞大的库,只须要一个轻量级的线程框架就好了,于是自己编了一个,现在只在Linux下用了,但是设计的时候是按照多平台来编的

  • 第二十三模板 3具体化函数模板

    //第二十三模板 3具体化函数模板 //具体化函数模板, 顾名思义, 即具体化了函数参数和功能的模板 //1 函数模板不能重载 /*#include <iostream> using namespace std; template <class T> void Swap(T &a, T &b); struct people { char name[10]; int age; }; void show(people &p); int main() { int

  • 《LRS项目重构来看&amp;quot;泛型&amp;quot;(二)——异曲同工,泛型过程和C++函数模板的比较》

    引言: 上一篇博客我们谈到C++中的模板,一个是类模板,一个是函数模板.重点说了一下函数模板.话说,其实C++中的模板和.NetFramework中的泛型可谓是是异曲同工! 首先,从泛型的思想上来看: 将算法与数据结构完全分离开,使得一次定义的算法能作用于多种数据结构,从而实现高度可重用的开发.通过泛型可以定义类型安全的数据结构,而没有必要使用实际的数据类型,这将显著提高系统性能并得到高质量的代码(因为可以重用数据处理算法,没有必要复制类型特定的代码). 其次,从形式上看: C++中定义一个函数

  • [转]VC++创建一个线程并传递参数

    From: http://tech.e800.com.cn/articles/2009/1126/1259215502260_1.html 近来做个项目需要写点程序,比较烦.net写的老是需要背着.net包走,所以准备用VC++来写,其中用到了线程方面的知识这里记录下来以备后用. 创建一个工作线程十分简单,只需要两步你的线程就能跑了:(1)实现线程函数和(2)开始线程.不需要由CWinThread派生类,你可以不加修改地使用CWinThread.下面我们来看看如何开始一个线程. AfxBegin

  • CPP 6th——运算符重载+函数重载+函数模板

    运算符重载的概念及语法 所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能. 函数重载 C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以.这就是函数的重载(Function Overloading).借助重载,一个函数名可以有多种用途. 参数列表又叫参数签名,包括参数的类型.参数的个数和参数的顺序,只要

  • Cocos2d-x 3.0 JNI BUG 修复。(Android 如何创建一个线程 延迟执行函数 创建一个随机数)

    cocos2d-x 3.0bata 版本在 Cocos2dxActivity 的create方法下面直接访问c++的jni方法会崩溃.原因是cocos2d-x部分完全构建好需要一些延迟时间,所以java访问不到c++里面的JNI函数. 在create方法里面改造如下代码.就可以解决了. publicclass Cocos2dxActivity extends NativeActivity{ //添加一个Handler 在create代码之前. private Handlerhandler =ne

  • 常用 API 函数(11): 进程和线程函数

    CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作 CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用 ConnectNamedPipe 指示一台服务器等待下去,直至客户机同一个命名管道连接 CreateEvent 创建一个事件对象 CreateMailslot 创建一个邮路.返回的句柄由邮路服务器使用(收件人) CreateMutex 创建一个互斥体(MUTEX) CreateNamedPipe 创建一个命名管道.返回的句柄由管道的服

  • C++11:基于std::queue和std::mutex构建一个线程安全的队列

    C++中的模板std::queue提供了一个队列容器,但这个容器并不是线程安全的,如果在多线程环境下使用队列,它是不能直接拿来用的. 基于它做一个线程安全的队列也并不复杂.基本的原理就是用std::mutext信号量对std::queue进行访问控制,以保证任何一个线程都是独占式访问,下面是完整的代码. /* * threadsafe_queue.h * * Created on: 2016年7月26日 * Author: guyadong */ #ifndef COMMON_SOURCE_CP

  • 函数模板在c++动态顺序表中的大作用

    函数模板提供了一种机制通过它我们可以保留函数定义和函数调用的语义在一个程序位置上封装了一段代码确保在函数调用之前实参只被计算一次. 函数模板提供一个种用来自动生成各种类型函数实例的算法程序员对于函数接口参数和返回类型中的全部或者部分类型进行参数化(parameterize)而函数体保持不变. 函数模板使用注意事项: 1.每个函数模板前边都需要添加模板声明例如:template<typename T> 2.在模板类的使用时,注意其类型改变,例如: template<typename T&g

  • common lisp定义一个宏函数

    刚开始学习macro遇到一点小问题,现在要定义一个宏函数variable-chain,可以接收任意多个参数,实现如下效果 lisp(setf a 0) (setf b 0) (setf c 0) (variable-chain a b c) > a b > b c > c 0 即(variable-chain a b c d)将a的值置为b的变量名,将b的值置为c的变量名,以此类推 一开始我写的代码如下: lisp(defmacro variable-chain (&rest v

Tags: