当前位置: 首页 >> 程序设计 >> C创建新线程的源码
 

C创建新线程的源码

作者:happytang      来源:     发表时间:2006-06-14     浏览次数:      字号:    

#include <windows.h>
#include <stdio.h>

//线程函数
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
 int i = 0;
 while(i < 20)
 {
  printf("I am from a thread,count = %d\n",i++);
 }
 return 0;
}

int main(int argc, char* argv[])
{
 HANDLE hThread;
 DWORD dwThreadId;
 //创建一个新线程
 hThread = CreateThread(
  NULL,    //默认安全属性
  NULL,    //默认堆栈大小
  ThreadProc,   //线程入口地址(执行线程的函数)
  NULL,    //传给函数的参数
  0,     //指定线程立即执行
  &dwThreadId   //返回线程的ID号
  );
 printf("Now another thread has been Created,ID:%d\n",dwThreadId);
 //等待新线程运行结束
 WaitForSingleObject(hThread,INFINITE); //INFINITE表示等待无限长,单位为毫秒
 CloseHandle(hThread);
 return 0;
}

-----------------------------------------------------------------------------------------------------------------------

#include <windows.h>
#include <string.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
 char szCommandLine[] = "cmd";
 STARTUPINFO si = {sizeof(si)};
 BOOL bRet;
 PROCESS_INFORMATION pi;
 //指定显示ShowWindows有效
 si.dwFlags = STARTF_USESHOWWINDOW;
 si.wShowWindow = TRUE;
 bRet = CreateProcess(
  NULL,    //不在此指定可执行文件的文件名
  szCommandLine,  //命令行参数
  NULL,    //默认进程安全性
  NULL,    //默认线程安全性
  FALSE,    //当前进程内的句柄不可以被子进程继承
  CREATE_NEW_CONSOLE, //为新进程创建一个新的控制台窗口
  NULL,    //使用本进程的环境变量
  NULL,    //使用本进程的驱动器和目录
  &si,    //父进程传给子进程的一些信息
  &pi);    //保存新进程信息的结构

 if(bRet)
 {
  //不使用两个句柄,最好立刻关闭
  CloseHandle(pi.hThread);
  CloseHandle(pi.hProcess);
  printf("新进程的进程ID号是:%d\n",pi.dwProcessId);
  printf("新进程的主线程ID号是:%d\n",pi.dwThreadId);
 }
 return 0;
}
---------------------------------------------------------------------------------------------------

C/C++中的多线程入门源码


作者: 贺忆东

一个很简单的多线程程序,主要用于了解临界区的使用

#include
#include
#include

#pragma comment(lib,"libcmt.lib")

const int NLOOP = 100;

int counter = 0;

void doit(void*);

CRITICAL_SECTION beswap ;

int main()
{

 HANDLE pnt[2];

 InitializeCriticalSection(&beswap);

 pnt[0] = (HANDLE)_beginthread(doit,0,NULL);
 pnt[1] = (HANDLE)_beginthread(doit,0,NULL);

 WaitForMultipleObjects( 2, pnt, TRUE, 1000L);

 DeleteCriticalSection(&beswap);
 
 return 0;
}

void doit(void*)
{
 printf("go...\n");

 int i, val = 0;

 for(i = 0; i < NLOOP; ++i)
 {
  EnterCriticalSection(&beswap);

  val = counter;
  printf("%d\n",val+1);
  counter = val + 1;

  LeaveCriticalSection(&beswap);
 }

 printf("end...\n");

 return ;
}


责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •