c - Windows : trouble with command line arguments 上的进程和线程 C 编程

标签 c windows multithreading netbeans process

我正在通过 Netbeans(使用 Windows 7)使用 C 语言处理进程和线程。 我正在使用命令行参数,但是在运行程序时它无法运行。如果我使用“运行 Netbeans”按钮,它不会询问我需要输入的参数并会显示消息:

/cygdrive/C/Program Files/Netbeans 8.1/ide/bin/nativeexecution/dorun.sh: line 33: 3592 Segmentation Fault (core dumped) sh "${SHFILE}"

我正在尝试使用 cmd 控制台,但似乎我在以这种方式调用函数时出错了:

gcc ej1.c 2

我应该使用这种格式:

gcc font_file.c -o exe_file.exe

但据我所知,Netbeans 文件夹中没有 .exe 文件。这是我在 running through Windows cmd 时收到的消息.

代码如下:

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

int main(int argc, char *argv[]) {
    HANDLE hThread2;
    DWORD IDThread2;
    int n = atoi(argv[1]);
    printf("Parámetro: n = %d\n\n",n);

    printf("Soy el proceso %d\n",(int)GetCurrentProcessId());
    printf("Comienza el hilo primario (ID %d)\n\n",(int)GetCurrentThreadId());


    void func(int *n){
        printf("Comienza el hilo secundario (ID %d)\n",(int)GetCurrentThreadId());
        int i;
        int var = 0;
        for(i=0; i<*n; i++){
            var++;
        }
        printf("Valor final de la variable: %d\n",var);
        printf("Finaliza el hilo secundario (ID %d)\n\n",(int)GetCurrentThreadId());
    }



    hThread2 = CreateThread (NULL,
                            0,
                            (LPTHREAD_START_ROUTINE) func,
                            &n,
                            0,
                            &IDThread2);

    WaitForSingleObject(hThread2, // Este es el descriptor dell objeto por el que se espera
                        INFINITE);

    CloseHandle(hThread2);

    printf("Finaliza el hilo primario (ID %d)\n",(int)GetCurrentThreadId());
    return 0;
}

最佳答案

函数CreateThread 要求第三个参数是ThreadProc 类型,它是DWORD(*)(LPVOID) 类型的函数指针.

DWORD 是无符号 32 位整数,LPVOID 是指向 void 的指针。

您的代码传递给 CreateThread 的函数具有 void(*)(int*) 类型,这些类型显然不兼容。

C 标准声明通过与函数类型不兼容的函数指针调用函数将导致未定义的行为。这可能表现为段错误。

关于c - Windows : trouble with command line arguments 上的进程和线程 C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34829156/

相关文章:

C线程只运行一次

c - 开机时自动启动进程

windows - 引用 %USERPROFILE% 环境变量失败

c++ - NodeJS : Native c++ module with multi-threading (openmp)

c - 我怎样才能使 C 中的十六进制颜色变亮/变暗?

c - 如何在C中为未知大小的结构数组分配内存

c - 使用 MPI 同步主/从模型

c++ - 如何正确取消初始化 OpenSSL

java - 如何在不同线程上同步部分方法

java - 在线程中迭代结果集会导致异常。使用 JDBC 连接对 Hive 进行查询的结果集