Потоковые C-программы в minGW - PullRequest
1 голос
/ 20 февраля 2011

Я создаю программу, которая перехватывает все пакеты, когда определенная ссылка не работает.Мне нужно было бы реализовать сниффер и проверку ссылок в качестве потоков.Но у minGW нет pthreads.

Как реализовать потоки в minGW?

Редактировать: ответить

http://www.codeproject.com/KB/threads/sync.aspx

Вивек Гоэль привел меня к этому (_beginthread).Оба примера компилируются в Code :: blocks / minGW!

Ответы [ 3 ]

5 голосов
/ 20 февраля 2011

MinGW не предоставляет полную модель POSIX.Если вам нужны потоки в стандартном пакете, вам придется использовать разновидность Windows.

Это указано на главной странице MinGW :

Компиляторы MinGWобеспечить доступ к функциональности среды выполнения Microsoft C и некоторых сред, зависящих от языка.MinGW, будучи минималистом, не пытается и никогда не будет пытаться предоставить среду выполнения POSIX для развертывания приложений POSIX в MS-Windows. Если вы хотите развертывать приложения POSIX на этой платформе, рассмотрите Cygwin.

Cygwin поддерживает поддержку pthreads, потому что она предоставляет Cygwin DLL, слой эмуляции, тогда как MinGW - больше gcc для использования с Windows, что делает вещи.

В качестве альтернативы, если Cygwin не подходит, вы можете посмотреть Pthreads / Win32 , который утверждает, что работает с MinGW.

2 голосов
/ 12 октября 2011

С MinGW у вас есть несколько вариантов. Мои рекомендации:

  1. Используйте родной Windows API для создания своих тем.

  2. Используйте хорошую библиотеку для управления этим. Я обычно использую C ++ фреймворк под названием JUCE, чтобы иметь лучшая жизнь.

Используя Windows API, вы можете попробовать что-то вроде этого:

/*
 *  main.c
 *
 *  Created on: 18/10/2011
 *  Author: Cesar Carlos Ortiz Pantoja.
 */

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

int exitCondition;

struct threadParams{
    int param1;
    int param2;
};

static DWORD WINAPI myFirstThread(void* threadParams)
{
    struct threadParams* params = (struct threadParams*)threadParams;

    while(exitCondition){
        printf("My Thread! Param1:%d, Param2:%d\n", params->param1, params->param2);
        fflush(stdout);
        Sleep(1000);
    }

    return 0;
}

int main(void){
    DWORD threadDescriptor;
    struct threadParams params1 = {1, 2};
    exitCondition = 1;

    CreateThread(
        NULL,                   /* default security attributes.   */
        0,                      /* use default stack size.        */
        myFirstThread,          /* thread function name.          */
        (void*)&params1,        /* argument to thread function.   */
        0,                      /* use default creation flags.    */
        &threadDescriptor);     /* returns the thread identifier. */

    while(1){
        printf("Main Program!\n");
        fflush(stdout);
        Sleep(2000);
    }

    return 0;
}

Привет

1 голос
/ 20 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...