我正在创建一个程序,当某个链接关闭时拦截所有数据包。我需要将sniffer和link-checker实现为线程。但是minGW没有pthreads。
如何在minGW中实现线程?
修改:应答
http://www.codeproject.com/KB/threads/sync.aspx
Vivek Goel带我去了这个(_beginthread)。两个示例都在Code :: blocks / minGW!
上编译答案 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,你有一些选择。 我的推荐:
使用本机Windows API创建线程。
使用一个好的库来管理它。我通常使用一个名为JUCE的C ++框架来拥有一个 更好的生活。
使用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*)¶ms1, /* 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