关 于 CGI 下 的 多 线 程 UP有分!!!
请问各位高手CGI下是否可以用多线程
由于有大量分布的数据需要检索 因此想通过多线程来查询 这样可以提高速度
代码如下:
hThread[i] = CreateThread(
NULL, // default security attributes
0, // use default stack size
ThreadOTSearch, // thread function
&thcs[i], // argument to thread function
CREATE_SUSPENDED,
&dwThreadId); // returns the thread identifier
DuplicateHandle(
GetCurrentProcess(),
hThread[i],
GetCurrentProcess(),
&pDupThreadHandle[i],
0, FALSE, DUPLICATE_SAME_ACCESS);
ResumeThread(hThread[i]);
// Check the return value for success.
if (hThread[i] == NULL)
{
printf("CreateThread failed.");
}
thread func:
DWORD WINAPI ThreadOTSearch( threadcs *thcs )
{
//res为查询句柄
Result[thcs->tag].res = GetRes(thcs->szstr);
return 0;
}
此种方法总是有线程间冲突的情况
请问该如何解决
问题点数:100、回复次数:19Top
1 楼MaiCle(原来小日本连畜生都不如)回复于 2003-08-04 20:50:48 得分 3
不熟,UP。Top
2 楼pi1ot(-=\Pilot/=-)回复于 2003-08-04 21:35:06 得分 3
多线程的话你怎么处理返回呢,感兴趣。Top
3 楼chinazcw(笑口常开)回复于 2003-08-04 23:03:48 得分 3
我是搞不定的,来凑凑热闹,顺道混点分~~~啊哈~~Top
4 楼antijpn(antijpn)回复于 2003-08-04 23:59:10 得分 20
以前曾经想写多线程的程序,后来发现太困难,放弃了
其实多线程并不一定高效,线程之间的切换会造成CPU周期的浪费Top
5 楼sunyt(sunyt)回复于 2003-08-05 17:53:10 得分 0
高手帮忙啊!!!Top
6 楼sunyt(sunyt)回复于 2003-08-05 18:19:15 得分 0
pi1ot(-=\Pilot/=-): 返回给全局结构体Top
7 楼cityvagrant(城市过客)回复于 2003-08-05 18:30:04 得分 2
up有分吗?Top
8 楼chinazcw(笑口常开)回复于 2003-08-05 18:36:19 得分 2
UPUPUPTop
9 楼maxcai(cailin)回复于 2003-08-05 18:42:07 得分 2
up&接分哟Top
10 楼pi1ot(-=\Pilot/=-)回复于 2003-08-05 18:55:35 得分 5
我是说你怎么确定线程什么时候全部返回?然后输出到浏览器?Top
11 楼hhb_007()回复于 2003-08-05 19:41:35 得分 50
同意 antijpn(antijpn)
多线程主要用在会 I/O阻塞的地方,如果是检索数据的话,用多线程并不见得会提升效率,反而会由于主线程和查询线程间的交互增加复杂度。
如果要使用多线程,可以在查询结束后发消息通知主线程,通常即创建窗口的线程。
也许还有其他方法,欢迎各位大侠指正。
Top
12 楼sunyt(sunyt)回复于 2003-08-06 11:26:37 得分 0
pi1ot(-=\Pilot/=-):
我定义了一个全局的结构体数组
会给每个线程传一个结构体 结构体中有一项为是否检索完毕的标志
创建完几个线程之后 会有一段检测程序的代码
for(i = 0 ; i < 线程个数; i++)
{
while (Result[i].stag != 'Y')
Sleep(1);
//关闭当前线程
CloseHandle(pDupThreadHandle[i]);
}Top
13 楼sunyt(sunyt)回复于 2003-08-06 21:24:05 得分 0
???
Top
14 楼lemon520(喷血)回复于 2003-08-06 21:50:43 得分 2
UP!
接分!Top
15 楼lilianghao(hao)回复于 2003-08-07 10:45:04 得分 2
upTop
16 楼wshcdr(dd)回复于 2003-08-07 15:44:43 得分 2
没听说过,只能凑热闹一下了Top
17 楼BAYERN(我有个愿望-要把月亮踹成直的,把太阳捏成方的)回复于 2003-08-07 16:02:23 得分 2
俺不会,来接分的。Top
18 楼sunyt(sunyt)回复于 2003-08-08 18:07:23 得分 0
有会的吗?Top
19 楼warrenchou(hello)回复于 2003-08-08 18:10:28 得分 2
upTop




