minGW中的螺纹C程序

时间:2011-02-20 13:04:59

标签: c mingw

我正在创建一个程序,当某个链接关闭时拦截所有数据包。我需要将sniffer和link-checker实现为线程。但是minGW没有pthreads。

如何在minGW中实现线程?

修改:应答

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

Vivek Goel带我去了这个(_beginthread)。两个示例都在Code :: blocks / minGW!

上编译

3 个答案:

答案 0 :(得分:5)

MinGW不提供完整的POSIX模型。如果你想要标准包中的线程,你将不得不使用Windows品种。

它在MinGW main page上声明:

  

MinGW编译器提供对Microsoft C运行时功能和某些特定于语言的运行时的访问。 MinGW是Minimalist,不会,也绝不会尝试为MS-Windows上的POSIX应用程序部署提供POSIX运行时环境。如果您希望在此平台上部署POSIX应用程序,请考虑使用Cygwin。

Cygwin 确实支持pthread,因为它提供了Cygwin DLL,一个仿真层,而MinGW更像是用于Windows操作方式的gcc。

或者,如果Cygwin不是一个选项,您可以查看声称与MinGW合作的Pthreads/Win32

答案 1 :(得分:2)

使用MinGW,你有一些选择。 我的推荐:

  1. 使用本机Windows API创建线程。

  2. 使用一个好的库来管理它。我通常使用一个名为JUCE的C ++框架来拥有一个 更好的生活。

  3. 使用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;
    }
    

    此致

答案 2 :(得分:1)

你必须使用 WIN 32 Threads API见 http://www.mingw.org/wiki/Use_the_thread_library http://msdn.microsoft.com/en-us/library/ms684254(V = vs.85)的.aspx