ZBLOG

#include #include #include #include #include #include void *tfn(void *arg){ int i=(int)arg; sleep(i); printf("--i am %dth thread:pid =%d,tid=%lu\n",i+1,getpid(),pthread_self()); return NUL...

这是因为在你的代码中,你将指针类型 void* 强制转换为整数类型 int 造成了警告。这种警告发生是因为不同平台上的指针和整数类型可能具有不同的大小。

要解决这个问题,你可以使用 intptr_t 类型来保存指针值,并且在传递给线程函数时进行强制转换。下面是修改后的代码示例:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <pthread.h>
#include <stdint.h>

void *tfn(void *arg) {
    intptr_t i = (intptr_t)arg;
    sleep(i);
    printf("--I am %ldth thread: pid=%d, tid=%lu\n", i + 1, getpid(), pthread_self());
    return NULL;
}

int main(int argc, char *argv[]) {
    intptr_t i;
    int ret;
    pthread_t tid;

    for (i = 0; i < 5; i++) {
        ret = pthread_create(&tid, NULL, tfn, (void*)i);
        if (ret != 0) {
            perror("pthread_create error");
            exit(1);
        }
    }

    sleep(i);

    return 0;
}

通过使用 intptr_t 类型,我们可以确保在不同平台上指针和整数之间进行正确的转换。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=3340

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?