`
mr.lili
  • 浏览: 152204 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类

c++线程CreateThread以及调用参数的函数

 
阅读更多
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using std::cout;
using std::endl;
DWORD WINAPI TaskThreadExe(LPVOID lp);
typedef   struct   stuParam
{
std::string name;
int     age;

}TstuParam;

int _tmain(int argc, _TCHAR* argv[])
{
/*
E:\Versioncheck\iCAN V001R003 集成定制专用版本\bin>VerCheckCmd.exe -b "E:\19\bas
e\iManagerM2000_CBSC_MATCH_ENG_V200R011C33SPC019.tar" -s ""E:\19\new\iManagerM20
00_CBSC_MATCH_CHS_V200R012C36SPC013_pkg.tar""  -a -r -o "E:\out"
*/
cout<<"start:>>>>>>>>>>>>>>>>>>>>>>>>"<<endl;
HANDLE s1;
TstuParam   MyParam;
MyParam.name = "aaa";
MyParam.age = 12;

//通过线程去执行
s1 = CreateThread(NULL,0,TaskThreadExe,&MyParam,0,NULL);
cout<<"main thread is run:\r\n"<<endl;
::Sleep(4000);
CloseHandle(s1);
cout<<"main thread is end>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"<<endl;


char *ptr[5] = {"beijing", "shanghai", "tianjin", "chongqing","aaaaaaaa"}; 
int len = sizeof(ptr)/sizeof(ptr[0]);
char *ptr2[5];
for(int i=0; i<len; i++){ 
printf("aaaa:%s\r\n", ptr[i]);
ptr2[i] = ptr[i];
//printf("bbbb:%s\r\n", ptr2[i]);
}
cout<<">>>>>>>>>>>>>>>>>>>>>>>>"<<endl;
for(int i=0; i<len; i++){ 
printf("bbbb:%s\r\n", ptr2[i]);
}
cout<<len<<endl;
system("pause");

return 0;
}

void ExeCmd();
void ExecuteCmdCommand(const std::string &ToDoStr);
DWORD WINAPI TaskThreadExe(LPVOID lp)
{
cout<<">>>>>>>>>>>>>>>>>>>>>"<<endl;
TstuParam   *myPara   =   (TstuParam   *)lp;
std::string namet = myPara->name;
int aget = myPara->age;
//cout<<"姓名:"<<namet<<endl;
cout<<"年龄:"<<aget<<endl;
//cout<<"thread1 is running:\r\n"<<endl;
/* int i=0;
try
{
for (;i<2;i++)
{
cout<<"线程:>>>>>>>>>>>>>>>>>>>>>"<<i<<endl;
ExeCmd();
}
}
catch (...)
{
cout<<"出错了<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"<<i<<endl;
}
cout<<"thread is end<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"<<i<<endl;
*/

return 0;
}

void ExeCmd(){
//cout<<"线程:>>>>>>>>>>>>>>"<<endl;
std::string str = "\" \"E:\\Versioncheck\\iCAN V001R003 集成定制专用版本\\bin\\";
str += "VerCheckCmd.exe\" -b \"E:\\19\\base";
str += "\\iManagerM2000_CBSC_MATCH_ENG_V200R011C33SPC019.tar\" -s \"E:\\19\\new\\iManagerM2000_CBSC_MATCH_CHS_V200R012C36SPC013_pkg.tar\"";
str += " -c -f -p -r  \"";
//str = "\" \"E:\\workProject\\VersionCheck\\集成\\Code\\debug\\VerCheckCmd.exe \"";
ExecuteCmdCommand(str);
//system(str.c_str());
}

void ExecuteCmdCommand(const std::string &ToDoStr)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW ;
si.wShowWindow = SW_HIDE;
std::string str("C:\\WINDOWS\\system32\\cmd.exe /c ");//+ToDoStr
str += ToDoStr;
//LPTSTR pSter = _T(str);
LPSTR pSter;
pSter = new char[str.length()+1];
::strcpy(pSter,str.c_str());

BOOL ret = CreateProcess(NULL, pSter, NULL, NULL, FALSE,0, NULL, NULL, &si, &pi);
//str.clear();
::WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return;
}
分享到:
评论

相关推荐

    c++成员函数成为线程函数

    本文将深入探讨如何在多线程环境中调用C++的成员函数,并有效地使用类中的成员变量。 一、C++成员函数成为线程函数 1.1 为什么要在线程中调用成员函数 在多线程应用中,通常需要在线程中执行特定任务,这些任务...

    C++ 线程暂停、继续

    创建一个新的线程可以简单地通过传递一个可调用对象(如函数或成员函数指针)和其参数给`std::thread`构造函数来实现。例如: ```cpp #include void myFunction(int arg) { // 线程执行的代码 } int main() { ...

    最简单的C++ 线程封装

    总结来说,这个“最简单的C++线程封装”示例展示了如何通过面向对象的方式创建跨平台的线程类,提供了一致的接口供用户实现线程逻辑,并处理了不同操作系统的线程创建、同步和管理细节。这对于开发跨平台的C++应用...

    vc 多线程集合,调用,参数传递

    标题和描述提及的“vc 多线程集合,调用,参数传递”主要涵盖了如何在Microsoft Visual C++ (VC++)环境中创建和管理多线程,以及如何在不同线程之间传递参数。 多线程的引入是为了解决单线程程序在执行长时间任务时...

    C++多线程详解

    此函数接收多个参数,包括安全属性、线程栈大小、线程函数地址、传递给线程函数的参数、创建标志以及用于接收线程标识符的指针。 ```cpp hThread[i] = CreateThread( NULL, // security attributes that should be...

    C++多线程编程.pdf

    `lpThreadAttributes`参数用于设置线程的安全属性,`dwStackSize`指定了线程堆栈的大小,`lpStartAddress`是线程入口函数的地址,`lpParameter`提供传递给线程函数的参数,`dwCreationFlags`用来控制线程的创建选项...

    C++学习 线程创建代码

    在深入探讨给定的C++线程创建代码之前,我们首先需要理解几个核心概念:线程、线程函数、线程句柄以及Windows API函数。这段代码是一个典型的使用Windows API来创建线程的例子,尤其适合C++初学者作为学习线程编程的...

    visual c++实验,多线程的实现

    1. **定义线程函数**: 在C++中,线程由一个函数执行,该函数通常接受一个参数并返回一个值。例如: ```cpp DWORD WINAPI ThreadFunction(LPVOID lpParam) { // 线程代码 return 0; } ``` 2. **创建线程**: ...

    VC++调用大漠插件多线程运行模版

    1. **线程创建**:使用`_beginthreadex`或`CreateThread`函数创建新的线程。每个线程都有自己的执行上下文,可以在不同的CPU核心上并行执行任务。 2. **线程同步**:为了防止不同线程间的数据冲突,我们需要使用...

    c++ builder 多线程

    2. **使用CreateThread函数**: 如果不使用VCL,可以直接调用Windows API的`CreateThread`函数来创建线程。这种方法更底层,需要管理更多的线程细节,如线程局部存储和同步原语。 ### 三、线程同步与通信 在多线程...

    C++如何创建杀死线程

    在Windows平台上,可以使用Windows API中的`CreateThread`函数创建线程,以及`TerminateThread`函数强制终止线程。然而,强制终止线程通常被视为最后的手段,因为它可能留下未清理的资源,并导致数据不一致。 ```...

    线程封装类

    创建时,需要指定线程的入口函数(线程函数),以及传递给该函数的参数。 2. **线程暂停**:线程的暂停操作在多线程编程中很常见,但需要注意的是,Windows API并没有提供直接的线程暂停功能。一般通过设置线程同步...

    VC++在线程中创建并显示窗口

    在Windows系统中,创建线程可以使用`CreateThread`函数或者`_beginthreadex`函数,它们都能创建新的执行线程。 创建线程时,我们需要提供一个线程函数,这个函数将在新线程中运行。在这个例子中,线程函数可能会...

    C++多线程例子

    在C++11之前,多线程通常依赖于平台特定的API,如POSIX的`pthread`或Windows的`CreateThread`。现在,C++标准库为我们提供了一种统一且跨平台的方式来处理多线程。 首先,创建一个新的线程需要使用`std::thread`类...

    《c++习题集,虚函数表的详细解析,win32多线程的程序设计,多线程编程指南》

    本压缩包包含了几个关键的学习资源,旨在帮助开发者深入理解和应用C++,尤其是虚函数表的原理以及Win32 API中的多线程编程。 首先,C++习题集是学习任何编程语言的基础。通过实践和解决问题,可以巩固理论知识,...

    C++创建线程C++创建线程

    除此之外,还可以使用POSIX线程库(pthread)或者Windows API中的CreateThread函数来创建线程,但这些是非跨平台的方法。 2. **C++11标准库中的线程创建** - `std::thread`类是C++11引入的线程对象,通过实例化这...

    visual c++用类的方法作为线程的函数体.rar

    2. **全局或局部函数配合指针**:创建一个全局或局部函数作为线程函数,这个函数接受一个指向类对象的指针作为参数,然后调用该对象的方法。这样,我们可以在线程中间接调用类的方法。 3. **std::function和std::...

    一个创建多线程的例子

    本文将深入探讨如何在C++中创建多线程,特别关注`CreateThread`函数的使用,这对于初学者理解并发编程至关重要。 首先,我们需要了解线程的基本概念。线程是程序执行的最小单元,每个线程都有自己的执行路径,可以...

    c++多线程编程初学实例一

    它接受多个参数,如线程属性、栈大小、入口点函数以及传递给新线程的参数。虽然`std::thread`更易于使用,但掌握Win32 API对于理解底层系统工作原理和兼容旧代码是有益的。 需要注意的是,多线程并不总是带来性能...

    Windows 多线程API C++类的封装

    首先,Windows API中的主要线程管理函数包括`CreateThread`用于创建新线程,`ExitThread`用于结束当前线程,以及`WaitForSingleObject`和`WaitForMultipleObjects`用于线程间的同步。`CreateThread`函数需要提供线程...

Global site tag (gtag.js) - Google Analytics