gpt4 book ai didi

c - 调用相同函数时的线程问题

转载 作者:行者123 更新时间:2023-11-30 20:24:50 25 4
gpt4 key购买 nike

我正在尝试创建给定函数的 4 个实例,但无法确定被调用的函数如何知道哪个线程调用了它。

这在我的头文件中:

// GPIO PINS stored within structs, for each sonic range finder.
typedef struct sonicPins {
// front left pins.
int trig1;
int echo1;
// front right pins.
int trig2;
int echo2;
// rear left pins.
int trig3;
int echo3;
// rear right pins.
int trig4;
int echo4;
} args;

void* setup(void *pinsPtr);
extern int threadFunc();

这是在我的 C 文件中。

int threadFunc()
{
struct sonicPins * pins;
pthread_create(&pt1, NULL, setup, (void*) pins);
pthread_create(&pt2, NULL, setup, (void*) pins);
pthread_create(&pt3, NULL, setup, (void*) pins);
pthread_create(&pt4, NULL, setup, (void*) pins);
return 1;
}

下面的代码片段的职责是设置引脚值并运行操作来管理传感器。每个传感器都有自己的回波和触发值,均为整数。

void* setup(void *pinsPtr)
{
struct sonicPins *ptr = pinsPtr;
int trig = 0, Echo = 0;

printf("thread id %d\n", pt1);
if (pt1 == 1993737328) {
trig = ptr->trig1;
Echo = ptr->echo1;
} else if (pt2 == 1986323568) {
trig = ptr->trig2;
Echo = ptr->trig2;
} else if (pt3 == 1977164912) {
trig = ptr->trig3;
Echo = ptr->trig3;
} else if (pt4 == 4) {
trig = ptr->trig4;
Echo = ptr->echo4;
}
…other work…
}

我是 C 新手,确实忘记了线程 ID 并不总是相同,但我不确定可以使用什么来进行处理。你能提出一些建议吗?

最佳答案

您需要的是一组结构,其中每个结构都有一个回显和触发值。然后,将不同的数组条目传递给每个线程,以便每个线程只知道自己的回显和触发值。

#include <stdio.h>
#include <pthread.h>

typedef struct sonicPins {
int trig;
int echo;
} sonicPins;

void *threadFunc( void *args )
{
sonicPins *pins = args;
printf( "trig=%d echo=%d\n", pins->trig, pins->echo );
return NULL;
}

int main( void )
{
pthread_t threadID[4];
sonicPins pinsArray[4] = { { 1, 2 }, { 4, 8 }, { 16, 32 }, { 64, 128 } };

for ( int i = 0; i < 4; i++ )
{
if ( pthread_create( &threadID[i], NULL, threadFunc, &pinsArray[i] ) != 0 )
fprintf( stderr, "pthread_create failed: %d\n", i );
}

for ( int i = 0; i < 4; i++ )
pthread_join( threadID[i], NULL );
}

关于c - 调用相同函数时的线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32194964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com