gpt4 book ai didi

c++ - _beginthreadex 无法从 'overloaded-function' 转换

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:29 26 4
gpt4 key购买 nike

所以我制作了一个函数来打印跨不同窗口分层的文本,我希望它在一个单独的线程中,这样我就可以运行一个计时器来显示文本,同时让用户保持打开状态以继续使用该程序。但是,当我编译时出现此错误:

error C2664: '_beginthreadex' : cannot convert parameter 3 from 'overloaded-function' to 'unsigned int (__stdcall *)(void *)'

这是主要的 cpp 文件:

#include "stdafx.h"
#include "Trial.h"

int main()
{
wchar_t* text = L"Message!";
HWND hwnd = FindWindowW(0, L"Halo");
unsigned threadID;
_beginthreadex(0, 0, DrawText,(void *)(hwnd, 175, 15, text, 8), 0 , &threadID);
// Other function here
}

这里是头文件 Trial.h:(它有点草率,但工作正常,因为大多数显示器更新大约 2 毫秒,sleep(2) 应该有助于防止闪烁)。

#pragma once    
#include <Windows.h>
#include <string>
#include <process.h>

void DrawText(HWND hWnd, float x, float y, wchar_t* mybuffer, float DisplayTime)
{
SetForegroundWindow(hWnd);
HDC hdc = GetDC(hWnd);
SetBkColor(hdc,RGB(255, 255, 255)); // While Background color...
SetBkMode(hdc, TRANSPARENT); // Set background to transparent so we don't see the white...

int howmany = sizeof(mybuffer) * 2;

DisplayTime *= 500;
int p = 0;
while(p < DisplayTime)
{
// Shadow Offset
SetTextColor(hdc,RGB(0, 0, 0));
TextOut(hdc,x+2,y+2, (LPCWSTR)mybuffer,howmany);

// Primary text
SetTextColor(hdc,RGB(255, 0, 0));
TextOutW(hdc,x,y,(LPCWSTR)mybuffer,howmany);

UpdateWindow(hWnd);
p++;
Sleep(2);
}
ReleaseDC(hWnd,hdc);
_endthreadex(0);
}

我查看了多个示例,检查了语法,并确保我没有搞砸 _beginthreadex,但似乎找不到问题的原因:|

最佳答案

简而言之,线程启动函数需要遵循一个精确的原型(prototype),而不是您使用的原型(prototype)。

他们可以接受一个接受单个 void * 的函数。

有几种解决方案。

  1. 更改您的函数以接受 void*。立即将其转换为您创建的某种类型的“struct *”并拥有您想要的数据。您通常会使用 new/malloc 在 main 中创建结构,然后在线程函数中不需要时删除/释放它。
  2. 更简洁的替代方法是“新建”您创建的类的对象。为该类提供一个采用所述 void * 的公共(public)静态方法。使用静态方法作为线程启动器,并将对象的地址作为“this”传递。然后将 void * 静态转换为对象类型,并在对象本身上调用一些“启动/运行”例程。让对象在从线程例程返回之前删除自身,除非您有跨线程的更协调的解决方案。

关于c++ - _beginthreadex 无法从 'overloaded-function' 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9714041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com