在C ++ DLL中使用表单只是为了注意。我认为这很重要,因为我需要它与应用程序具有相同的变量(可能会有所不同或不同)
开始我的表格我必须这样做:
Form1 ^ ThisForm = gcnew Form1;
Application::Run(ThisForm);
哪个基本没什么难的。我的表格在使用时可以正常使用。现在我想通过Form1(ThisForm)创建一个线程。它们在这里定义:
public:
VOID WINAPI MainThread2();
它只需将此标签设置为当前时间:
VOID Form1::MainThread2()
{
while (true)
{
Beep(400, 100);
time_t CurrentTime = time(0);
struct tm* TimeStruct = localtime(&CurrentTime);
string str = to_string(TimeStruct->tm_hour) + ":" + to_string(TimeStruct->tm_min) + ":" + to_string(TimeStruct->tm_sec);
String^ timestring = gcnew String(str.c_str());
this->label1->Text = "hello";
}
}
但显然我不能用这个创建一个帖子:
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThisForm->MainThread2, NULL, NULL, NULL);
由于此错误:
error C2440: 'type cast': cannot convert from 'overloaded-function' to 'LPTHREAD_START_ROUTINE'
我如何设法通过ThisForm启动线程
答案 0 :(得分:1)
我建议您避免使用非托管线程API,并使用托管API。这将允许您使用托管类的实例方法,而不仅仅是静态C ++方法。
MSDN参考:
如果您确实想要使用非托管API,则需要将线程方法设置为静态或全局方法(而不是实例,就像现在一样)。如果它被允许成为托管类的静态方法,我不记得我的头脑。您可能需要将它作为一种全局方法才能使其工作。 (非托管类的静态方法也可以工作,但这并不会给你带来太多帮助。)