- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我制作了一个函数来打印跨不同窗口分层的文本,我希望它在一个单独的线程中,这样我就可以运行一个计时器来显示文本,同时让用户保持打开状态以继续使用该程序。但是,当我编译时出现此错误:
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 * 的函数。
有几种解决方案。
关于c++ - _beginthreadex 无法从 'overloaded-function' 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9714041/
要定义我的头文件中的线程: class HttpClient { public: ... unsigned int __stdcall PerformLogin(void*);
下面的代码是我的整个测试程序。每次我按 ENTER 时,进程使用的 RAM 都会增加 4k(它会不断增加,不会停止;我在任务管理器中看到它)。怎么了? _beginthread 也会发生同样的事情。
如何创建静态成员函数的线程例程 class Blah { static void WINAPI Start(); }; // .. // ... // .... hThread = (HAND
我目前正在调试一个多线程应用程序,它运行时没有错误,直到某些函数被调用了大约 2000 次。之后应用程序停止响应,我可以追踪到 _beginthreadex 因内存不足错误而失败。 在 Process
是否可以向 beginthreadex 传递多个参数? 我知道我可以创建一个类或结构,但如果我有不相关的数据片段我不想合并到一个类或结构中怎么办? Boost 库似乎允许多个参数,但我该如何为标准 c
我正在尝试使用 _beginthreadex 进行一些基本的并行化,并按照我给出的示例传递参数,但它不起作用。 有什么想法吗? #include #include void MyThread(vo
我不确定我是否以正确的方式解决这个问题,但我正在使用 C++ 和 Visual Studio 2013 中的成员函数和线程。 我发现的其他答案说我必须将我的成员函数转换为静态函数,这样我就可以创建该线
我有点困惑为什么 _beginthreadex() 没有启动我的线程。基本上,我有一个线程: 编辑 #3 -- 添加了 while() 作为我代码的一部分,但我最初从未声明过,因此该线程必须始终运行,
我想将 HANDLE 和 HWND 变量传递给 _beginthreadex 函数,我不想将这些变量设置为全局变量。 这就是我试过的: int APIENTRY WinMain(HINSTANCE h
我用分析器检查了一个项目的源代码。我是 C++ 新手。 它告诉我应该使用 Use _beginthreadex/_endthreadex 函数而不是 CreateThread/ExitThread 函
我有一个丑陋的 C 代码(我是 Windows 下 C 的新手)不要评判我......我想让它成为多线程,它从我的网络服务器列表中读取并检查它们是否存在,因为牢度我需要它是多线程的。搜索了很多谷歌和
大家好,这是我的代码 #include "StdAfx.h" #include #include #include unsigned int __stdcall threadproc(void
我最近了解到 ::_beginthreadex() 总是优于 ::CreateThread(),所以我更改了所有使用 ::CreateThread 的调用()。 唯一的缺点是我不再在 Visual S
我正在尝试将项目从 VS2008 转换为 VS2013,我遇到的(众多)问题之一是: c:\program files (x86)\microsoft visual studio 12.0\vc\at
我有一堆 QWebViews 渲染到一个小部件上。有一点我开始收到错误 QThread::start: Failed to create thread (The access code is inva
所以我制作了一个函数来打印跨不同窗口分层的文本,我希望它在一个单独的线程中,这样我就可以运行一个计时器来显示文本,同时让用户保持打开状态以继续使用该程序。但是,当我编译时出现此错误: error C2
#include #include #include //#include "windowstate.cpp" //DWORD WINAPI MyThreadFunction( LPVOID l
我试图了解 CreateThread 和 _beginthreadex 之间的区别,以及为什么调用 DisableThreadLibraryCalls 只会阻止使用 安装的线程_beginthread
我对使用从 _beginthreadex() 返回的句柄不感兴趣。立即对其调用 CloseHandle() 是否安全? 我认为必须这样做以避免内存泄漏。 最佳答案 是的,您可以在决定不再需要该句柄后立
我正在尝试将一些代码移植到 64 位,但似乎 _beginthreadex 中的线程 address 标识符是 unsigned int这是 32 位的,我无法从函数传递/接收 64 位的 addre
我是一名优秀的程序员,十分优秀!