WINAPI CreateThread C并不总是启动功能

时间:2018-06-26 17:19:49

标签: c winapi

我正在编写C程序。

对于线程,我使用WINAPI库。

但是有时CreateThread函数不会启动该函数关联。

我将WaitForSingleObject函数与INFINITE参数一起使用来让我的线程启动,但他从未启动

GetLastError函数始终返回0,所以我不知道我的错误在哪里

按下GTK按钮时将调用合并功能。

下面您将找到我的代码

void merge(GtkWidget *wiget, gpointer data){

    HANDLE thread;
    FtpLogin *login = (FtpLogin *) data;

    thread = CreateThread(NULL, 0, mergeThread, login, 0, NULL);

    printf("%ld", GetLastError());

    WaitForSingleObject(thread, INFINITE);

    if(thread == NULL)
     puts("error");
}

DWORD WINAPI mergeThread( LPVOID lpParam )
{
   puts("Thread start");

   return 0;
}

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

C运行时库需要一些每线程初始化。对C RTL一无所知的CreateThread()不会执行该操作。

使用CreateThread()代替_beginthreadex()。在<process.h>中声明。

答案 1 :(得分:1)

根据this page,GTK不是线程安全的。与 mergeThread 函数中的GUI进行交互的任何内容都可能产生意外结果。

请参考我提供的有关多线程GTK应用程序的更多信息,以了解如何使用GDK。