Как использовать поток в C с использованием компилятора MingW [duplicate]

UPDATE: Действительно умные люди быстро указали на этот ответ , который объясняет странность, описанную ниже

ОРИГИНАЛЬНЫЙ ОТВЕТ:

я знаю, помогает ли это кому-либо, но я был застрял с той же проблемой, даже когда делал что-то вроде правды. В моем основном методе у меня есть такой код:

ApplicationContext context =
    new ClassPathXmlApplicationContext(new String[] {
        "common.xml",
        "token.xml",
        "pep-config.xml" });
    TokenInitializer ti = context.getBean(TokenInitializer.class);

и в файле token.xml у меня была строка


Я заметил, что пакет .path больше не существует, поэтому я просто положил строку навсегда.

И после этого NPE начал заходить. В pep-config.xml у меня было всего 2 боба:



и класс SomeAbac имеет свойство, объявленное как

@Autowired private Settings settings;

по неизвестной причине, настройки null в init (), когда элемент отсутствует вообще, но когда он присутствует и имеет некоторые bs в качестве basePackage, все работает Что ж. Теперь эта строка выглядит так:


, и она работает. Может быть, кто-то может дать объяснение, но для меня это достаточно прямо сейчас)

1
задан aitchnyu 24 February 2011 в 13:38
поделиться

3 ответа

Вы должны использовать API WIN 32 Threads, см. http://www.mingw.org/wiki/Use_the_thread_library http://msdn.microsoft.com/en-us/library/ms684254 ( v = vs.85) .aspx

1
ответ дан Vivek Goel 22 August 2018 в 11:10
поделиться

С 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
ответ дан César Ortiz 22 August 2018 в 11:10
поделиться
  • 1
    Вы не должны называть CreateThread. Вместо этого вы должны использовать _beginthread и _beginthreadex, иначе у вас будут проблемы! – Brett 12 March 2012 в 05:59
  • 2
    Мы должны слушать Бретта здесь. Некоторые люди не умеют читать. mingw.org/wiki/Use_the_thread_library – Bluebaron 20 August 2015 в 23:37

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

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

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

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

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

4
ответ дан paxdiablo 22 August 2018 в 11:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: