C 中 ThreadStart和ParameterizedThreadStart区别

在C语言中,使用多线程可以提高程序的并发性和效率。创建一个新的线程需要指定线程函数和线程参数。C语言中提供了两种方法来创建线程函数,分别是ThreadStart和ParameterizedThreadStart。

1. ThreadStart

ThreadStart是最简单的线程函数,它使用通用无参函数。该函数不需要任何参数并返回void,它可以通过线程的参数属性传递其他信息。当新线程被创建时,它开始执行指定的线程函数。

ThreadStart的定义如下:

```

typedef void (*ThreadStart)(void);

```

通过ThreadStart,我们可以轻松地创建一个新线程,但是要注意的是,它不能传递任何参数。

示例代码如下:

```

#include

#include

void func()

{

printf("Thread start\n");

Sleep(2000);

}

int main()

{

HANDLE hThread;

DWORD threadId;

hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, NULL, 0, &threadId);

if (hThread){

printf("Thread created\n");

WaitForSingleObject(hThread, INFINITE);

printf("Thread finished\n");

}

return 0;

}

```

在上面的例子中,我们创建了一个线程,该线程使用func()函数作为线程函数,由于func()函数不需要任何参数,所以在线程创建时,我们将最后一个参数设置为NULL。

2. ParameterizedThreadStart

ParameterizedThreadStart函数使用有参数的函数作为线程函数。它允许我们将任意数量和任意类型的参数传递给线程函数。

ParameterizedThreadStart作为线程函数与ThreadStart类似,只是它多了一个参数,用来传递线程参数。例如,我们可以将一个结构体作为线程参数,在线程中读取结构体的数据。

ParameterizedThreadStart的定义如下:

```

typedef void (*ParameterizedThreadStart)(void*);

```

示例代码如下:

```

#include

#include

#include

typedef struct {

int arg1;

float arg2;

}ThreadParams;

void func2(void* params)

{

ThreadParams* p = (ThreadParams*)params;

printf("Thread start, arg1: %d, arg2: %f\n", p->arg1, p->arg2);

Sleep(2000);

}

int main()

{

HANDLE hThread;

DWORD threadId;

ThreadParams params = { 10, 3.14 };

hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func2, ¶ms, 0, &threadId);

if (hThread){

printf("Thread created\n");

WaitForSingleObject(hThread, INFINITE);

printf("Thread finished\n");

}

return 0;

}

```

在上面的例子中,我们创建了一个线程,该线程使用func2()函数作为线程函数,并将结构体params作为线程参数传递给线程。线程函数内部通过类型转换将params指针转换为ThreadParams结构体类型,并读取其数据。

总结:

ThreadStart和ParameterizedThreadStart函数都可以用来创建线程函数,ThreadStart不能传递参数,ParameterizedThreadStart可以传递参数。使用ParameterizedThreadStart函数可以更灵活地传递参数,特别是当需要传递多个参数时。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(18) 打赏

评论列表 共有 1 条评论

南月泠雪 1年前 回复TA

谓天才,就是努力的力量。

立即
投稿
发表
评论
返回
顶部