我正在通过 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/