c: thread in windows
/*****************************************************************//**
* \file helloworld.C
* \brief 业务操作方法
* VSCODE c11 安装插件“Doxygen Documentation Generator”,用来生成注释。
安装插件”C/C++ Snippets”,用来生成文件头、代码块分割线等。KoroFileHeader
C/C++ Snippets插件设置
* \author geovindu,Geovin Du
* 站在巨人的肩膀上 Standing on the Shoulders of Giants
* https://learn.microsoft.com/zh-cn/windows/win32/api/processthreadsapi/nf-processthreadsapi-createthread
* \date 2023-09-19
***********************************************************************/
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include <math.h>
#include<threadpoolapiset.h>
#include<time.h>
#include<unistd.h>
#include<Windows.h>
#include <process.h>
#include "include/SortAlgorithm.h"
#include "include/CheckTieck.h"
#include "include/TakeNumber.h"
#include "include/validator.h"
#include "include/validatorView.h"
#define thread_count 5 // Number of task threads
/* 线程共享内存 */
volatile int i = 0;
/* 线程句柄 */
HANDLE h1, h2;
typedef unsigned __int64 uintptr_t;
HANDLE WINAPI CreateThread(
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ SIZE_T dwStackSize,
_In_ LPTHREAD_START_ROUTINE lpStartAddress,
_In_opt_ LPVOID lpParameter,
_In_ DWORD dwCreationFlags,
_Out_opt_ LPDWORD lpThreadId
);
DWORD WINAPI ThreadFunc(LPVOID p)
{
printf("我是子线程, pid = %d\n", GetCurrentThreadId()); //输出子线程pid
return 0;
}
/**
* @brief 启动线程
*
* @param security
* @param stack_size
* @param start_address
* @param argilist
* @param initflag
* @param threaddr
* @return uintptr_t
*/
uintptr_t beginthreadex(void* security,
unsigned stack_size,
unsigned(__stdcall* start_address)(void*),
void* argilist,
unsigned initflag,
unsigned* threaddr);
/**
* @brief
*
*/
void endthread(void);
/**
* @brief
*
* @param retval
*/
void endthreadex(unsigned retval);
DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
DWORD WaitForMultipleObjects(DWORD nCount,
const HANDLE* lpHandles,
BOOL bWaitAll,
DWORD dwMilliseconds
);
/**
* @brief
*
* @param arg
* @return unsigned
*/
unsigned int __stdcall ThreadOne(void* arg)
{
while (1)
{
i++;
printf("One i = %d\n", i);
Sleep(100);
if(i==thread_count)
{
//endthread();
break;
}
}
}
/**
* @brief
*
* @param arg
* @return unsigned
*/
unsigned int __stdcall ThreadTwo(void* arg)
{
while (1)
{
i++;
printf("Two i = %d\n", i);
Sleep(100);
if(i==thread_count)
{
// endthread();
break;
}
}
}
int main(void)
{
printf("hello c world, \n");
printf("你好,中国\n");
HANDLE hThread;
DWORD threadId;
hThread = CreateThread(NULL, 0, ThreadFunc, 0, 0, &threadId); // 创建线程
printf("我是主线程, pid = %d\n", GetCurrentThreadId()); //输出主线程pid
Sleep(2000);
h1 = (HANDLE)_beginthreadex(NULL, 0, ThreadOne, NULL, 0, NULL);
h2 = (HANDLE)_beginthreadex(NULL, 0, ThreadTwo, NULL, 0, NULL);
system("pause"); //liunx 不支持
return 0;
)
/**
* @brief 定义一个函数,接受一个整数参数,打印该参数的平方,并返回该参数加一
*
* @param x
* @return int
*/
int square_and_add_one(int x) {
printf("The square of %d is %d\n", x, x * x);
return x + 1;
}
/**
* @brief 定义一个线程函数,接受一个指向整数的指针,调用square_and_add_one函数,并将返回值存入指针指向的位置
*
* @param arg
* @return DWORD
*/
DWORD WINAPI threadFunc(LPVOID arg) {
int *result = (int *)arg;
*result = square_and_add_one(*result);
return 0;
}
int main(void)
{
printf("hello c world, \n");
printf("你好,中国\n");
int argc;
char *argv;//[]={'\0'};
char ddds[11]="The hello world";
argv=ddds;
argc=2;
// 检查命令行参数的个数,至少需要一个参数
if (argc < 2) {
fprintf(stderr, "Usage: %s <number>\n", argv[0]);
exit(1);
}
printf("%s",argv[0]);
// 将第一个参数转换为整数
int numthread =0;//atoi(argv[0]);
// 创建一个线程句柄
HANDLE hThread;
// 创建一个线程,并传入thread_func函数和num的地址
hThread = CreateThread(NULL, 0, threadFunc, &numthread, 0, NULL);
// 检查线程是否创建成功
if (hThread == NULL) {
fprintf(stderr, "CreateThread failed: %d\n", GetLastError());
exit(2);
}
// 等待线程结束,并关闭线程句柄
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
// 打印线程返回的值
printf("The thread returned %d\n", num);
system("pause"); //liunx 不支持
return 0;
}
输出:

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号