>関数のスレッド化とはサブ関数を作るということでいいのでしょうか?
h2so5さんが仰る通りちょっと違うものだと思います。
[シングルスレッド 従来のやり方]
selectを使って行っているやり方のイメージは
店員が一人しかいない家電量販店のようなものです
たくさんのクライアントからの通信をAというスレッドが三面六臂の活躍で面倒を見ています
[マルチスレッド 新しい方法]
一方マルチスレッドを使うとたくさんの人でクライアントの面倒を見る感じです
やってくるクライアントをとりあえず処理する、その後は新しく作ったスレッドに任せる(=スレッドA)
1人目のクライアントはBさん(=スレッドB)が面倒を見る
2人目のクライアントはCさん(=スレッドC)が面倒を見る
3人目のクライアントはDさん(=スレッドD)が面倒を見る
のように作ることができます。
店員が複数いるてお客さんに個別に対応している家電量販店のようなものです
(そんな家電量販店は聞いたことありませんが…(;^ω^A)
あまり変わらないように見えるのですが、例えば上のパターンで
あるクライアントの実行している処理が時間がかかったとします。
そうなるとAさんはそのクライアントにつきっきりになってしまいます
他のクライアントは面倒を見てもらえません、処理を頼んでも無視されてしまいます
しかし、マルチスレッドにすればAさんの担当しているクライアントがどれだけ時間をかけようが
ほかのB,C、Dの担当しているクライアントに関係ないのでB,C,Dはいつでも処理を実行できます
なのでマルチスレッドの方が便利です
(マルチスレッドはデメリットもたくさんあるのですが…)
具体的な方法ですが
WinsockなのでWindowsだと思いますが
CreateTread関数を使います。(beginthreadexとかもあるのですが…)
コード:
//クライアントが来たら通信を処理するスレッドを立てる
//家電量販店の店員が足りない時は店員を作る
CreateThread(NULL , 0 , TenninThread ,(LPVOID)p, 0 ,NULL);
実際に作ったスレッドでどういう処理をするのかは以下に書いておきます
DWORD WINAPI TenninThread(LPVOID lpvoid ) {
//クライアントごとにやってほしい処理を書く
//家電量販店の店員がやらないといけないこと
}