【问题标题】:Pthreads in C. Simple example doesn't work [closed]C中的Pthreads。简单的例子不起作用[关闭]
【发布时间】:2014-01-23 02:26:56
【问题描述】:

我开始使用 Pthreads 进行编程。我使用 Dev-C++ 并将库链接到项目。简单的程序可以编译,但它不起作用。下面我附上了代码。有谁知道问题出在哪里?

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


void *func (void* x){
    printf("(%s)",'Hi. It's thread number 1');
    return 1;
}

int main() {
    pthread_t thread;
    int x=1;

    pthread_create(&thread, NULL, func, &x);
    pthread_join(thread,1);

    return 0;
}

【问题讨论】:

  • 你遇到了什么错误?
  • 定义:不起作用
  • 再看看printf的电话。
  • 为什么不起作用?您的预期行为是什么?另外,不要使用Dev-C++,它已经过时了。最后,除非您明确下载了 Windows 的 pthread 库,否则 Windows 本身并不支持 posix 线程。
  • 你写“它不工作”是什么意思?该程序做了什么,您期望它做什么?

标签: c pthreads dev-c++


【解决方案1】:

这一行

printf("(%s)",'Hi. It's thread number 1');

应该是

printf("(%s)", "Hi. It's thread number 1");

字符串文字用引号"括起来。


还将1 传递给pthread_join() 作为第二个nd 参数最有可能调用未定义的行为,因为它告诉函数将void * 类型的值写入地址1,这预计不会指向有效内存。

【讨论】:

  • OP 声称他的程序实际上可以编译,所以我担心这是一个复制/粘贴“错误”。但谁知道呢,我们拭目以待...... - 关于pthread_join() 的好点子。
  • 非常感谢!问题解决了。问题在于 pthread_join 的参数和 printf 中的引号。
  • @Pawel:不客气。如果这回答了您的问题,您可以通过单击答案的复选标记来标记它。
【解决方案2】:

编译器没有抱怨那个巨大的多字符字符常量吗? (它应该抱怨两次;一次是关于一个巨大的多字符字符常量,一次是在 printf 需要一个字符串时将字符常量传递给 printf。)请尝试在第 8 行的字符串周围使用双引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多