繁体   English   中英

Windows上的进程和线程C编程:命令行参数出现问题

[英]Processes & threads C programming on Windows: trouble with command line arguments

我正在通过Netbeans(在Windows 7中)使用C语言的进程和线程。 我正在使用命令行参数,但是当它来运行程序时,它将无法正常工作。 如果使用“运行Netbeans”按钮,则不会询问我需要输入的参数,而是显示以下消息:

/ cygdrive / C /程序文件/ Netbeans 8.1 / ide / bin / nativeexecution / dorun.sh:行33:3592分段错误(核心已转储)sh“ $ {SHFILE}”

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

gcc ej1.c 2

我应该使用这种格式:

gcc font_file.c -o exe_file.exe

但据我所知,Netbeans文件夹上没有.exe文件。 这是通过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标准指出,通过与函数类型不兼容的函数指针调用函数将导致不确定的行为。 这可能表现为分段错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM