015 线程创建

线程 
  ● 进程启动
    ○ 进程内核对象 进程空间
    ○ 线程
  ● 可以通过IDE设置入口函数
  ● 自己创建线程
    ○ 创建线程函数 CreateThread()
    ○ 新建线程内核对象(结构体)
  ● 线程
    ○ 分配一块内存空间,作为当前线程的堆栈
    ○ 两条在同一进程内线程,都是隔离的
    ○ 线程他们是封闭的,每个线程都有自己的一个堆栈
    ○ 但是都是属于当前进程内的堆栈
    ○ 进程赋予了线程交互的能力
  ● 线程创建

1 HANDLE WINAPI CreateThread(
2 _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
3 _In_ SIZE_T dwStackSize,
4 _In_ LPTHREAD_START_ROUTINE lpStartAddress,
5 _In_opt_ LPVOID lpParameter,
6 _In_ DWORD dwCreationFlags,
7 _Out_opt_ LPDWORD lpThreadId
8 );

参数1:lpThreadAttributes
  NULL使用默认安全性,不可以被子线程继承,否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE
参数2:dwStackSize
  设置初始栈空间的大小,可以设置数值,也可以不设置数值,不设置的话由抱编译器保留大小一般默认位1MB
参数3:lpStartAddress
  指向线程函数入口 的指针 线程开始的地址
参数4:lpParameter
  向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。
参数5:dwCreationFlags
  线程标志,可取值如下
    CREATE_SUSPENDED(0x00000004):创建一个挂起的线程
    STACK_SIZE_PARAM_IS_A_RESERVATION(0x00010000):dwStackSize参数指定初始的保留堆栈 的大小,  否   则,dwStackSize指定提交的大小
参数6:lpThreadId
  保存新线程的id

  ● 主线程退出和其他线程退出的区别
  ● 主线程退出 代表进程结束,全部线程推出
  ● 子线程主线程退出,子线程主线程会执行完成后才会退出

 1 #include <stdio.h>
 2 #include <tchar.h>
 3 #include <windows.h>
 4
 5 //启动了线程mainStartup
 6
 7 DWORD __stdcall MyMain1(LPVOID lParam)
 8 {
 9     int nParam = (int)lParam;
10     _tprintf(TEXT("nParam = %d\r\n"),nParam);
11     return 0;
12
13 }
14
15 DWORD __stdcall MyMain(LPVOID lParam)
16 {
17     int nParam = (int)lParam;
18     HANDLE  hThread = CreateThread(nullptr,0,MyMain1,(LPVOID)0x64,0,nullptr);
19     CloseHandle(hThread);
20     Sleep(1);
21     _tprintf(TEXT("nParam = %d\r\n"),nParam);
22     return 0;
23 }
24
25 int main()    //主线程 线程看书
26 {
27     HANDLE  hThread = CreateThread(nullptr,0,MyMain,(LPVOID)0xFFFFFFFF,0,nullptr);
28     CloseHandle(hThread);    //记得关闭线程
29
30     while(true)
31     {
32         Sleep(100);
33     }
34
35
36     return 0;
37 }

时间: 2025-01-14 03:27:10

015 线程创建的相关文章

线程创建代码

#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <string.h> #include <sys/syscall.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #ifndef T_DESC #define T_DESC(x, y) (y) #end

iOS-Senior10-多线程(子线程创建)

1.多线程概述 程序:由源代码生成的可执行应用.(eg:QQ.app) 进程:一个正在运行的程序可以看做一个进程.(eg:正在运行的QQ就是一个进程),进程用用独立运行所需的全部资源. 线程:程序中独立运行的代码段.(eg:接收QQ消息的代码) 一个进程是由一或多个线程组成.进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行. 1.1单线程 每个正在运行的程序(即进程),至少包含一个线程,这个线程就叫主线程. 主线程在程序启动时被创建,用于执行main函数. 只有一个主线程的

iOS开发——多线程OC篇&amp;(二)线程创建

创建线程 一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 - (BOOL)isMa

MFC 线程创建方式

MFC 分UI线程和工作线程,一般现在的应用程序都是一个主UI线程和N个工作线程来完成工作.主UI线程获取到工作线程发送的信息来刷新界面. 不过因为工作需要,MFC有要维护的项目,因此就学习一下MFC创建UI线程,使用工作线程的方式. 1.UI线程,继承CWinThread类  1 class CAddDeviceApp : public CWinThread 2 { 3     DECLARE_DYNCREATE(CAddDeviceApp) 4 protected: 5     CAddDe

win32多线程 (一) 线程创建与结束等待

#include "stdafx.h"#include <Windows.h>#include <iostream> using namespace std; DWORD WINAPI ThreadFuncFirst(LPVOID param){ int iCount = 50; while(iCount--){  cout<<"\nThreadFuncFirst:"<<iCount; } return 0;} DWO

C# WebService中任务处理线程创建子线程后

protected void WriteLog(string message) { lock (lockObject) { var file = System.IO.File.AppendText("C:\\log.txt"); file.WriteLine(message); file.Close(); } } protected void asyctest(int threadid) { this.WriteLog(string.Format("主线程({0})的子线程(

windows下线程创建

windows下线程创建: CreateThread()函数是Windows提供的API接口 1.HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTESlpThreadAttributes, SIZE_TdwStackSize, LPTHREAD_START_ROUTINElpStartAddress, LPVOIDlpParameter, DWORDdwCreationFlags, LPDWORDlpThreadId ); 函数说明: 第一个参数表示

爪哇国新游记之十二----线程创建的两种形式

public class Thread1 extends Thread{ public void run(){ int i=0; while(i<10){ i++; System.out.println(i); } } public static void main(String[] args){ Thread1 t=new Thread1(); t.start(); } } public class Thread2 implements Runnable{ @Override public v

测试我的笔记本能承受多少个线程创建

/*** * test how many threads can be created in x86 32 system * * ubuntu 13.0 * * *************************************************************/ #include <stdio.h> #include <pthread.h> static void test(void *arg); int main() { pthread_t p; pthr