关于创建线程的问题

MK777 2008-06-25 07:20:04
void RP_ReaderThread()
{
…………
}
……
我想创建一个线程
h_Thread[THREAD_NUM++]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_ReaderThread),&thread_info,0,&thread_ID);
结果报错:
'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
是什么原因啊?
...全文
98 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
spatx 2008-06-26
  • 打赏
  • 举报
回复
static DWORD __stdcall RP_ReaderThread(PVOID Parameter);
cnzdgs 2008-06-26
  • 打赏
  • 举报
回复
DWORD WINAPI RP_ReaderThread(PVOID Parameter)
cnzdgs 2008-06-26
  • 打赏
  • 举报
回复
必须确保thread_info在线程访问完成之前不能被释放,如果是函数内部定义的动态变量,函数返回时就会释放。
dbger 2008-06-26
  • 打赏
  • 举报
回复
界面线程也就是你的主线程。

工作线程也就是你创建的线程,可以通过发送自定义消息给界面线程。
MK777 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dbger 的回复:]
在线程函数里不要直接调用界面线程的函数,要通过发消息给界面线程来完成。
[/Quote]
可以直接与主线程通信来实现吗?
MK777 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dbger 的回复:]
在线程函数里不要直接调用界面线程的函数,要通过发消息给界面线程来完成。
[/Quote]
弱弱的问一句 界面线程是要自己定义吗?怎么定义的呢?
MK777 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dbger 的回复:]
在线程函数里不要直接调用界面线程的函数,要通过发消息给界面线程来完成。
[/Quote]
弱弱的问一句 界面线程是要自己定义吗?怎么定义的呢?
dbger 2008-06-26
  • 打赏
  • 举报
回复
在线程函数里不要直接调用界面线程的函数,要通过发消息给界面线程来完成。
MK777 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dbger 的回复:]
应该不会的,调试时WINAPI CTry1Dlg::RP_ReaderThread(LPVOID p)传入的p的值是0?

把创建的代码贴出来看看
[/Quote]
哦 我有个地方写错了一个变量 现在值对了
不过当运行到MFC的界面时点击按钮总是弹出Debug Assertion Failed的错误,我的程序是读者写者问题
在窗口的EDIT中显示进程运行的情况
我的程序在DEBUG下运行是对的 用上MFC就不对了 是为什么啊?
MK777 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dbger 的回复:]
应该不会的,调试时WINAPI CTry1Dlg::RP_ReaderThread(LPVOID p)传入的p的值是0?

把创建的代码贴出来看看
[/Quote]
哦 我有个地方写错了一个变量 现在值对了
不过当运行到MFC的界面时点击按钮总是弹出Debug Assertion Failed的错误,我的程序是读者写者问题
在窗口的EDIT中显示进程运行的情况
我的程序在DEBUG下运行是对的 用上MFC就不对了 是为什么啊?
dbger 2008-06-26
  • 打赏
  • 举报
回复
应该不会的,调试时WINAPI CTry1Dlg::RP_ReaderThread(LPVOID p)传入的p的值是0?

把创建的代码贴出来看看
MK777 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnzdgs 的回复:]
DWORD WINAPI RP_ReaderThread(PVOID Parameter)
[/Quote]

我已经改成DWORD WINAPI PVOID型了
但&thread_info总是传不到RP_ReaderThread中去
因为我在线程函数DWORD WINAPI CTry1Dlg::RP_ReaderThread(LPVOID p)中:
m_serial=((ThreadInfo*)(p))->serial ;
m_persist=(DWORD)(((ThreadInfo*)(p))->persist *INTE_PER_SEC);
m_delay=(DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC);
总是得不到值
是为什么传不过来呢?

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧