#include "stdafx.h"
#include<windows.h>
#include<strsafe.h>//win2003SDK必须安装 要不无此头文件。此文件是为了实现StringCchPrintf,StringCchLength。

#define MAX_THREADS 5
#define BUF_SIZE 255

typedef struct _MyData{
int val1;
int val2;
}MYDATA,*PMYDATA;

DWORD WINAPI ThreadProc(LPVOID lpParam)
{
  HANDLE hStdout;
  PMYDATA pData;
  TCHAR msgBuf[BUF_SIZE];
  size_t cchStringSize;
  DWORD dwChars;
  hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
  if(hStdout==INVALID_HANDLE_VALUE)
  return 1;
  
  pData=(PMYDATA)lpParam;

  StringCchPrintf(msgBuf,BUF_SIZE,TEXT("Parameters=%d,%d\n"),pData->val1,pData->val2);
  //printf("%d,%d\n",pData->val1,pData->val2);
  StringCchLength(msgBuf,BUF_SIZE,&cchStringSize);
  WriteConsole(hStdout,msgBuf,cchStringSize,&dwChars,NULL);

  HeapFree(GetProcessHeap(),0,pData);
  return 0;
}
void main()
{
  PMYDATA pData;
  DWORD dwThreadId[MAX_THREADS];
  HANDLE hThread[MAX_THREADS];
  int i;

  for(i=0;i<MAX_THREADS;i++)
  {

    pData=(PMYDATA)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(MYDATA));
    if(pData==NULL)
      ExitProcess(2);

    pData->val1=i;
    pData->val2=i+100;
    hThread[i]=CreateThread(
                  NULL,//defaultsecurityattributes
                  0,//usedefaultstacksize
                  ThreadProc,//threadfunction
                  pData,//argumenttothreadfunction
                  0,//usedefaultcreationflags
                  &dwThreadId[i]);//returnsthethreadidentifier

    if(hThread[i]==NULL)
    {
      ExitProcess(i);
    }
  }

  WaitForMultipleObjects(MAX_THREADS,hThread,TRUE,INFINITE);

  for(i=0;i<MAX_THREADS;i++)
  {
    CloseHandle(hThread[i]);
  }

  system("pause");
}

CreateThread demo的更多相关文章

  1. CreateThread线程函数

    之前在一篇 基于TCP套接字实现的简单Demo   一文中用到了线程函数CreateThread()函数来 创建新的线程.下面以一个最简单的多线程例子来说明. C-代码如下: //最简单的创建多线程实 ...

  2. CreateThread传递多个参数的方法(利用结构体的参数指针)

    很多朋友一直都在问CreateThread如何传递多个参数,CreateThread传递参数的方式是指针传递的,所以这里也可以利用指针来做!Demo 关键代码如下: type  TfrmTestThr ...

  3. 通过一个demo了解Redux

    TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...

  4. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

  5. 在线浏览PDF之PDF.JS (附demo)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#skill 下载地址:http://mozilla.gith ...

  6. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

  7. vue双向数据绑定原理探究(附demo)

    昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...

  8. Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决

    前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...

  9. iOS之ProtocolBuffer搭建和示例demo

    这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...

随机推荐

  1. 逆向破解学习二之<TraceMe>

    这次在破解TraceMe的时候,我有看过别人的视频.但是我并没有按照别人思路走,而是完全安全自己的思路试了一次.结果破解成功.新手学破解,如果有不对的地方,还请指出来. 004013A0 crackm ...

  2. Educational Codeforces Round 15 A, B , C 暴力 , map , 二分

    A. Maximum Increase time limit per test 1 second memory limit per test 256 megabytes input standard ...

  3. 这样子覆盖jquery的$

    window.$ = function(){ alert('nihao'); } window.ad = function(){ alert('nihao1'); } !function($){ $( ...

  4. c#将DataTable内容导出为CSV文件

    写了个类: class DataTableAndCSV { public static DataTable csvToDataTable(string file) { string strConn = ...

  5. HANA Architecture

    1 HANA 是基于内存计算的.行列都支持.使用列存储,列存储的特点是高压缩,查询快,节约空间, ---SAP HANA supports both, but is particularly opti ...

  6. mysql触发器与hash索引

    url查询哈希值的维护 触发器 2.1 创建表 pseudohash. 2.2 创建触发器,当对表进行插入和更新时,触发 触发器 delimiter |create trigger pseudohas ...

  7. hdu 4632 回文子序列计数

    水题 #include<iostream> #include<stdio.h> #include<cstring> #include<algorithm> ...

  8. UVA - 11324 The Largest Clique (强连通缩点+dp)

    题目链接 题意:从有向图G中找到一个最大的点集,使得该点集中任意两个结点u,v满足u可达v或v可达u. 解法:先把同处于一个强连通分量中的结点合并(缩点),得到一张DAG图,在DAG上dp即可. 感觉 ...

  9. mysql中获取自增函数解析

    1 如果 一条语句多行插入,默认情况下是返回第一行的自增id 2 存储过程可以与外部共享自增,而函数和触发器不能,因为在函数和触发器关闭的时候,自增自动restore 3 获取自增id,不会因为并发产 ...

  10. COGS1516. 棋盘上的车

    [题目描述] 在n*n(n≤20)的方格棋盘上放置n 个车,求使它们不能互相攻击的方案总数. [输入格式] 一行一个正整数n. [输出格式] 一行一个正整数,即方案总数. [样例输入] 3 [样例输出 ...