我正在编写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;
}
感谢您的帮助
答案 0 :(得分:1)
C运行时库需要一些每线程初始化。对C RTL一无所知的CreateThread()
不会执行该操作。
使用CreateThread()
代替_beginthreadex()
。在<process.h>
中声明。
答案 1 :(得分:1)
根据this page,GTK不是线程安全的。与 mergeThread 函数中的GUI进行交互的任何内容都可能产生意外结果。
请参考我提供的有关多线程GTK应用程序的更多信息,以了解如何使用GDK。